chore: update npm dependencies #123

Merged
Wuast94 merged 1 commit from updatarr/npm-dependencies-bac734c5b3 into main 2026-06-24 09:50:13 +02:00
Owner

Updates npm dependencies.

Automerge: Enabled

Changed files:

  • web/package.json:25 2.5.0 -> 2.5.1
  • web/package.json:34 6.0.2 -> 6.0.3
  • web/package.json:37 8.0.16 -> 8.1.0
Release notes

@biomejs/biome@2.5.0: @biomejs/biome: Biome CLI v2.5.0

Compare source

2.5.0

Minor Changes

  • #9539 f0615fd Thanks @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:

    ! index.ts:2:10: lint/correctness/noUnusedImports: Several of these imports are unused.
    ! main.ts:9:7: lint/correctness/noUnusedVariables: This variable f is unused.
    × index.ts:8:5: lint/suspicious/noImplicitAnyLet: This variable implicitly has the any type.
    × main.ts:2:10: lint/suspicious/noRedeclare: Shouldn't redeclare 'z'. Consider to delete it or rename it.
    
  • #9495 2056b23 Thanks @aviraldua93! - Added the useKeyWithClickEvents 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.

    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".

    <!-- Invalid: no keyboard handler -->
    <div onclick="handleClick()">Click me</div>
    
    <!-- Valid: has keyboard handler -->
    <div onclick="handleClick()" onkeydown="handleKeyDown()">Click me</div>
    
    <!-- Valid: inherently keyboard-accessible -->
    <button onclick="handleClick()">Submit</button>
    
  • #9152 9ec8500 Thanks @ematipico! - Added new nursery lint rule noUndeclaredClasses 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.

    <!-- .typo is used but never defined -->
    <html>
      <head>
        <style>
          .button {
            color: blue;
          }
        </style>
      </head>
      <body>
        <div class="button typo"></div>
      </body>
    </html>
    
  • #9152 9ec8500 Thanks @ematipico! - Added new nursery lint rule noUnusedClasses 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.

    /* styles.css — .ghost is never used in any importing file */
    .button {
      color: blue;
    }
    .ghost {
      color: red;
    }
    
    /* App.jsx */
    import "./styles.css";
    export default () => <div className="button" />;
    
  • #9546 6567efa Thanks @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.

  • #9716 701767a Thanks @faizkhairi! - Added the HTML version of the useHeadingContent rule. The rule now enforces that heading elements (h1-h6) have content accessible to screen readers in HTML, Vue, Svelte, and Astro files.

    <!-- Invalid: empty heading -->
    <h1></h1>
    
    <!-- Invalid: heading hidden from screen readers -->
    <h1 aria-hidden="true">invisible content</h1>
    
    <!-- Valid: heading with text content -->
    <h1>heading</h1>
    
    <!-- Valid: heading with accessible name -->
    <h1 aria-label="Screen reader content"></h1>
    
  • #9582 f437ef8 Thanks @rahuld109! - Added the HTML version of the useKeyWithMouseEvents rule. The rule now enforces that onmouseover is accompanied by onfocus and onmouseout is accompanied by onblur in HTML, Vue, Svelte, and Astro files.

    <!-- Invalid: onmouseover without onfocus -->
    <div onmouseover="handleMouseOver()"></div>
    
    <!-- Valid: onmouseover paired with onfocus -->
    <div onmouseover="handleMouseOver()" onfocus="handleFocus()"></div>
    
  • #9275 1fdbcee Thanks @ff1451! - Added the new assist action useSortedTypeFields, which sorts the fields of GraphQL object types, interface types and input object types alphabetically, e.g. name, age, id becomes age, id, name.

  • #10561 78075b7 Thanks @Conaclos! - Added a new style option to useExportType,
    which enforces a style for exporting types.
    This is the same option as the one provided by useImportType.

  • #8987 d16e32b Thanks @DerTimonius! - Ported the useValidAnchor rule to HTML. This rule enforces that all anchors are valid and that they are navigable elements.

  • #9533 4d251d4 Thanks @ematipico! - The init command now prints the Biome logo.

  • #10069 0eb9310 Thanks @Netail! - Added the HTML lint rule noStaticElementInteractions, which enforces that static, visible elements (such as <div>) that have click handlers use the valid role attribute.

    Invalid:

    <div onclick="myFunction()"></div>
    
  • #9134 2a43488 Thanks @ematipico! - Added the assist action useSortedPackageJson.

    This action organizes package.json fields according to the same conventions as the popular sort-package-json tool.

  • #9309 7daa18b Thanks @Bertie690! - The allowDoubleNegation option has been added to noImplicitCoercions to allow ignoring double negations inside code.

    With the option enabled, the following example is considered valid and is ignored by the rule:

    const truthy = !!value;
    
  • #9700 894f3fb Thanks @ematipico! - The Biome Language server now supports the "go-to definition" feature.

    When the cursor of the mouse is hovering an entity (variable, CSS class, type, etc.), and the command CTRL + click is triggered, the editor jumps to where this entity is defined, if the language server can find it.

    Here's what Biome is able to resolve:

    • Variables and types used in JavaScript modules, defined in the same file or imported from another module.
    • JSX Components used in JavaScript modules, defined in the same file or imported from another module.
    • CSS classes used in JSX and HTML-ish files (Vue, Svelte and Astro), and defined in CSS files.
    • Components used in HTML-ish files and defined in other HTML-ish.
    • Variables used in HTML-ish files and defined in the same file or imported from another module (JavaScript or HTML-ish).
  • #10070 bae0710 Thanks @Conaclos! - Added the :STYLE: group matcher for organizeImports that matches style imports.

    For example, the following configuration...

    {
      "assist": {
        "actions": {
          "source": {
            "organizeImports": {
              "level": "on",
              "options": {
                "groups": ["**", "!:STYLE:"],
                "sortBareImports": true
              }
            }
          }
        }
      }
    }
    

    ...places style imports last:

    - import "./style.css"
      import A from "./a.js"
    + import "./style.css"
    
  • #9170 e3107de Thanks @mdrobny! - Added bundleDependencies option to NoUndeclaredDependencies rule.

    This rule now supports imports of packages that are defined only in bundleDependencies and bundledDependencies arrays.

  • #9547 01f8473 Thanks @mujpao! - Added new assist rule useSortedAttributes for HTML, porting the existing JSX rule. This rule enforces sorted HTML attributes.

    Invalid

    <input type="text" id="name" name="name" />
    
  • #9366 2ca1117 Thanks @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.

  • #9073 74b20ee Thanks @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.

    Example plugin (useConsoleInfo.grit):

    language js
    
    `console.log($msg)` as $call where {
        register_diagnostic(span = $call, message = "Use console.info instead of console.log.", severity = "warn", fix_kind = "safe"),
        $call => `console.info($msg)`
    }
    

    Running biome check --write applies safe rewrites. Unsafe rewrites (the default, or fix_kind = "unsafe") still require --write --unsafe.

  • #9384 f4c9edc Thanks @Conaclos! - Added the sortBareImports option to organizeImports,
    which allows bare imports to be sorted within other imports when set to false.

    {
      "assist": {
        "actions": {
          "source": {
            "organizeImports": {
              "level": "on",
              "options": { "sortBareImports": true }
            }
          }
        }
      }
    }
    
    - import "b";
      import "a";
    + import "b";
      import { A } from "a";
    + import "./file";
      import { Local } from "./file";
    - import "./file";
    
  • #8731 e7872bf Thanks @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.

  • #10106 9b35f78 Thanks @ematipico! - Biome can now format and lint .svg files.

  • #9967 e9b6c17 Thanks @dyc3! - Added HTML support for noExcessiveLinesPerFile. Biome now reports HTML files that exceed the configured line limit, including when skipBlankLines is enabled.

  • #9491 b3eb63c Thanks @IxxyDev! - Added the HTML lint rule noAriaUnsupportedElements. 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.

    <!-- Invalid: meta does not support aria attributes -->
    <meta charset="UTF-8" role="meta" />
    
  • #9306 afd57a6 Thanks @viraxslot! - Added the noNoninteractiveTabindex 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.

    <div tabindex="0">Invalid: non-interactive element</div>
    `
    
  • #9276 6d041d9 Thanks @IxxyDev! - Added the HTML lint rule noRedundantRoles. 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.

    <!-- Invalid: role="button" is redundant on <button> -->
    <button role="button"></button>
    
  • #9813 69aadc2 Thanks @ematipico! - Added a new linter configuration called preset. With the new option, users can enable different kinds of rules at once.

    The following presets are available:

    • "recommended": it enables all Biome-recommended rules, or recommended rules of a group;
    • "all": it enables all Biome rules, or enables all rules of a group;
    • "none": it disables all Biome rules, or disable all rules of a group.

    You can enable recommended rules:

    {
      "linter": {
        "rules": {
          "preset": "recommended"
        }
      }
    }
    

    You can enable all rules at once:

    {
      linter: {
        rules: {
          preset: "all", // enables all rules
        },
      },
    }
    

    Or enable all rules for a group:

    {
      linter: {
        rules: {
          style: {
            preset: "all", // enables all rules in the style group
          },
        },
      },
    }
    

    This new option, however, doesn't affect how nursery rules work. Nursery rules must be enabled singularly, due to their nature.

    This new option is meant to replace recommended, so make sure to run the migrate command.

  • #10022 3422d71 Thanks @Netail! - Added the HTML lint rule noNoninteractiveElementToInteractiveRole, which enforces that interactive ARIA roles are not assigned to non-interactive HTML elements.

    Invalid:

    <h1 role="checkbox"></h1>
    
  • #8396 13785fc Thanks @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.

  • #10028 1009414 Thanks @Netail! - Added the HTML lint rule noInteractiveElementToNoninteractiveRole, which enforces that non-interactive ARIA roles are not assigned to interactive HTML elements.

    Invalid:

    <input role="img" />
    
  • #9853 816302f Thanks @Netail! - Added the new assist action useSortedSelectionSet, which sorts GraphQL selection sets alphabetically, e.g. name, age, id becomes age, id, name.

    Invalid:

    query {
      name
      age
      id
    }
    
  • #10074 9c7c6eb Thanks @georgephillips! - Added a kind field to the ImportMatcher used by the organizeImports 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" }).

    For example, with the following configuration:

    {
      "assist": {
        "actions": {
          "source": {
            "organizeImports": {
              "level": "on",
              "options": {
                "sortBareImports": true,
                "groups": [
                  { "kind": "!bare" },
                  ":BLANK_LINE:",
                  { "kind": "bare" }
                ]
              }
            }
          }
        }
      }
    }
    

    ...the following code:

    import "./register-my-component";
    import { render } from "react-dom";
    import "./polyfill";
    import { Button } from "@/components/Button";
    

    ...is organized as:

    import { render } from "react-dom";
    import { Button } from "@/components/Button";
    
    import "./polyfill";
    import "./register-my-component";
    
  • #9171 ce65710 Thanks @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.

    {
      "plugins": [
        "global-plugin.grit",
        {
          "path": "scoped-plugin.grit",
          "includes": ["src/**/*.ts", "!**/*.test.ts"]
        }
      ]
    }
    
  • #9617 dcb99ef Thanks @faizkhairi! - Ported useAriaActivedescendantWithTabindex a11y rule to HTML.

  • #9496 1dfb829 Thanks @aviraldua93! - Added HTML support for the noAriaHiddenOnFocusable 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.

    <!-- Invalid: aria-hidden on a focusable element -->
    <button aria-hidden="true">Submit</button>
    
    <!-- Valid: aria-hidden on a non-focusable element -->
    <div aria-hidden="true">decorative content</div>
    
  • #9792 f516854 Thanks @Maximiliano-Zeballos! - Added the useSemanticElements lint rule for HTML. The rule now detects the use of role attributes in HTML elements and suggests using semantic elements instead.

    For example, the following code is now flagged:

    <div role="navigation"></div>
    

    The rule suggests using <nav> instead.

  • #9761 cbbb7d5 Thanks @Maximiliano-Zeballos! - Ported the useValidAriaProps 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.

  • #9928 aa82576 Thanks @aviraldua93! - Ported useValidAriaValues to HTML. Biome now validates static aria-* attribute values in HTML elements against WAI-ARIA types, catching invalid values such as aria-hidden="yes".

  • #10562 6642895 Thanks @ematipico! - Promoted 73 nursery rules to stable groups.

    Four rules were renamed as part of the promotion:

    Correctness

    Promoted the following rules to the correctness group:

    Suspicious

    Promoted the following rules to the suspicious group:

    Style

    Promoted the following rules to the style group:

    Complexity

    Promoted the following rules to the complexity group:

    Performance

    Promoted the following rules to the performance group:

    Security

    Promoted the following rules to the security group:

    A11y

    Promoted the following rules to the a11y group:

  • #10121 450f8e1 Thanks @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.

  • #9397 d5913c9 Thanks @mvarendorff! - Added ignore option to the noUnusedVariables 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.

    For example, unused classes as well as all unused variables, functions, etc. called "unused" may be ignored entirely with the following configuration:

    {
      "ignore": {
        "*": ["unused"],
        "class": ["*"]
      }
    }
    
  • #10089 71a21f0 Thanks @Netail! - Added the lint rule noLabelWithoutControl to HTML, which enforces that a label element or component has a text label and an associated input.

    <label></label>
    
  • #10015 1828261 Thanks @Netail! - Added the HTML lint rule useAriaPropsSupportedByRole, which enforces that ARIA properties are valid for the roles that are supported by the element.

    <a href="#" aria-checked></a>
    
  • #10234 1a51569 Thanks @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.

    - callFn(foo)
    + callFn( foo )
    
    - const arr = [1, 2, 3];
    + const arr = [ 1, 2, 3 ];
    
    JavaScript

    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.

    - if (condition) {}
    + if ( condition ) {}
    
    - `Hello ${name}!`
    + `Hello ${ name }!`
    
    JSX

    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.

    - <Foo bar={value} />
    + <Foo bar={ value } />
    
    TypeScript

    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.

    - type Result = Map<string, number>;
    + type Result = Map< string, number >;
    
    JSON

    When enabled, Biome inserts spaces inside square brackets when the content fits on a single line. Empty brackets are not affected.

    - [1, 2, 3]
    + [ 1, 2, 3 ]
    
    CSS

    When enabled, Biome inserts spaces inside parentheses and square brackets when the content fits on a single line. Empty delimiters are not affected.

    - rgba(0, 0, 0, 1)
    + rgba( 0, 0, 0, 1 )
    
    - [data-attr]
    + [ data-attr ]
    
  • #10461 6bac1c3 Thanks @TXWSLYF! - Implements #9445. Added the allowImplicit option to useIterableCallbackReturn. When enabled, callbacks can use return; to implicitly return undefined, matching ESLint's array-callback-return rule.

  • #9571 5a8eb75 Thanks @dyc3! - Added configurable options to the useNumericSeparators 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).

    {
      "linter": {
        "rules": {
          "style": {
            "useNumericSeparators": {
              "level": "error",
              "options": {
                "decimal": {
                  "minimumDigits": 7,
                  "groupLength": 3
                },
                "hexadecimal": {
                  "minimumDigits": 4,
                  "groupLength": 2
                }
              }
            }
          }
        }
      }
    }
    
  • #10067 6064312 Thanks @Netail! - Added the lint rule useFocusableInteractive to HTML, which enforces elements with an interactive role and interaction handler to be focusable.

    Invalid:

    <div role="button"></div>
    
  • #10026 fb42ac4 Thanks @Netail! - Added the HTML lint rule noNoninteractiveElementInteractions, which disallows use event handlers on non-interactive elements.

    Invalid:

    <div onclick="myFunction()">button</div>
    
  • #10000 2093e3e Thanks @Netail! - Added the new assist action useSortedEnumMembers, which sorts TypeScript & GraphQL enum members.

    Invalid:

    enum Role {
      SUPER_ADMIN
      ADMIN
      USER
      GOD
    }
    
  • #10013 ad01d3d Thanks @Netail! - Added the HTML lint rule useValidAutocomplete, which enforces using valid values for the autocomplete attribute on input elements.

    <input autocomplete="incorrect" />
    

Patch Changes

  • #10498 995c1ff Thanks @citadelgrad! - Added the nursery rule useReactFunctionComponentDefinition, which enforces a consistent function type for named React function components.

    For example, the following snippet triggers the rule by default.

    const MyComponent = (props) => {
      return <div>{props.name}</div>;
    };
    
  • #9974 ff635a9 Thanks @pkallos! - Added ignoreMixedLogicalExpressions to useNullishCoalescing, partially addressing #9232. When enabled, Biome ignores || and ||= mixed with && in the same expression tree.

  • #10503 c656679 Thanks @Mokto! - Added the new nursery rule useSvelteRequireEachKey, a Svelte lint rule that reports {#each} blocks with item bindings that are missing a key.

  • #10516 0f29b83 Thanks @Dotify71! - Added useIncludes 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.

  • #10487 0c03ee3 Thanks @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.

  • #10566 a4a294c Thanks @dyc3! - Fixed useVueHyphenatedAttributes: The rule now only reports diagnostics in Vue files and ignores SVG elements.

  • #10565 72ccf3b Thanks @dyc3! - Fixed useVueConsistentVBindStyle: The rule no longer reports argument-less v-bind directives because they cannot be converted to shorthand syntax.

  • #10591 6e8557b Thanks @xsourabhsharma! - Fixed #10563: Biome now parses comma-separated CSS Modules composes values, such as composes: classA from "./a.css", classB from "./b.css";.

  • #10603 174b21b Thanks @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.

     .grid {
       grid-template-areas:
     /* row */
    -      "header header"
    -      "footer footer";
    +    "header header"
    +    "footer footer";
     }
    
  • #10542 c3f07f7 Thanks @dyc3! - Fixed #10513: Biome no longer rejects literal \u sequences in quoted HTML attribute values.

  • #10108 24e51d6 Thanks @IxxyDev! - Fixed #6611: noUnnecessaryConditions 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.

  • #10568 eb1ed0e Thanks @harsha-cpp! - Fixed #10564: useAriaPropsForRole no longer reports false positives for Vue v-bind shorthand bindings (:aria-checked, :aria-level, etc.).

  • #10570 2ceb4fe Thanks @Conaclos! - Improved noTsIgnore.
    The rule now reports more precisely the range of the @ts-ignore comment.

  • #10520 b55d10f Thanks @dyc3! - Fixed #10519: Vue v-on event handlers with multiple inline statements are now parsed consistently with Vue.

  • #10204 ebbf0bd Thanks @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.

  • #10546 e39bb2c Thanks @tim-we! - Fixed #10536: noUnknownFunction no longer flagged CSS contrast-color() as unknown. contrast-color() is Baseline 2026.

  • #8012 2be0264 Thanks @denbezrukov! - Improved the performance of the formatter in some cases. The formatter is now up to ~20% faster at formatting files.

  • #10467 9a5855e Thanks @Netail! - Added a new nursery rule noRestrictedDependencies, which flags imports and package.json dependency entries that have better alternatives in e18e's module replacement data.

    For example, the package globby is reported because there's a better alternative:

    import glob from "globby";
    
    {
      "dependencies": {
        "globby": "x.x.x"
      }
    }
    
  • #10470 84b43c5 Thanks @ShaharAviram1! - Fixed #10447: now the rule noProcessEnv detects the use of env when it's imported from process and node:process.

  • #10556 7ff6b16 Thanks @ematipico! - Fixed #10492: Biome no longer crashes with a stack overflow on certain code when a type-aware rule such as noFloatingPromises, noMisusedPromises, or noUnnecessaryConditions is enabled. For example, the following code used to crash Biome:

    function f(visitor) {
      let ctrl = visitor();
      for (const x of [0]) ctrl = ctrl();
    }
    
  • #10532 1da3c75 Thanks @denbezrukov! - CSS declarations with comments before : or after !important now preserve spaces before : and ;.

     .selector {
    -  padding/* name */: 1px;
    -  color: red !important /* note */;
    +  padding/* name */ : 1px;
    +  color: red !important /* note */ ;
     }
    
  • #10491 a1b5834 Thanks @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.

  • #10490 99bc7df Thanks @Mokto! - Fixed the CSS parser rejecting comma-separated selector lists inside :global() and :local() pseudo-class functions. Biome now correctly parses :global(.foo, .bar).

  • #10543 c394fae Thanks @mangod12! - Fixed #10477: The RDJSON reporter now emits code replacement text for fix suggestions instead of the human-readable fix description.

  • #10530 e8e1e6a Thanks @Conaclos! - Fixed #10493: useImportType now correctly separates types from a default named import when all imports are types and the style option is set to separatedType.

  • #10555 263c7cc Thanks @Mokto! - Improved Svelte lint rule accuracy for quoted attribute values containing {expression} interpolations.

    • noRedundantAlt no longer emits false positives when the alt text contains an interpolation, e.g. alt="image of {person}".
    • useButtonType no longer emits false positives for dynamic button types written as type="{dynamicType}".
    • noScriptUrl no longer emits false positives for dynamic hrefs such as href="{url}".
  • #10489 96ef9a4 Thanks @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}.

  • #10539 935c59a Thanks @dyc3! - Improved how diagnostics print long lines of code, for example minified files where the entire source code is printed in one line.

What's Changed

New Contributors

Full Changelog: https://github.com/biomejs/biome/compare/@biomejs/biome@2.4.16...@biomejs/biome@2.5.0

plugin-react@6.0.2: @vitejs/plugin-react: plugin-react@6.0.2

Compare source

Allow all options in reactCompilerPreset (#1189)

This is a type only change. Only compilationMode and target options were available for reactCompilerPreset.

v8.1.0: vite: v8.1.0

Compare source

Please refer to CHANGELOG.md for details.

Updates `npm dependencies`. Automerge: Enabled Changed files: - `web/package.json:25` `2.5.0` -> `2.5.1` - `web/package.json:34` `6.0.2` -> `6.0.3` - `web/package.json:37` `8.0.16` -> `8.1.0` <details> <summary>Release notes</summary> ### [`@biomejs/biome@2.5.0`](https://github.com/biomejs/biome/releases/tag/%40biomejs/biome%402.5.0): @biomejs/biome: Biome CLI v2.5.0 [Compare source](https://github.com/biomejs/biome/compare/2.5.0...@biomejs%2Fbiome@2.5.0) ## 2.5.0 ### Minor Changes - [#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: ``` ! index.ts:2:10: lint/correctness/noUnusedImports: Several of these imports are unused. ! main.ts:9:7: lint/correctness/noUnusedVariables: This variable f is unused. × index.ts:8:5: lint/suspicious/noImplicitAnyLet: This variable implicitly has the any type. × main.ts:2:10: lint/suspicious/noRedeclare: Shouldn't redeclare 'z'. Consider to delete it or rename it. ``` - [#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. 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"`. ```html <!-- Invalid: no keyboard handler --> <div onclick="handleClick()">Click me</div> <!-- Valid: has keyboard handler --> <div onclick="handleClick()" onkeydown="handleKeyDown()">Click me</div> <!-- Valid: inherently keyboard-accessible --> <button onclick="handleClick()">Submit</button> ``` - [#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. ```html <!-- .typo is used but never defined --> <html> <head> <style> .button { color: blue; } </style> </head> <body> <div class="button typo"></div> </body> </html> ``` - [#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. ```css /* styles.css — .ghost is never used in any importing file */ .button { color: blue; } .ghost { color: red; } ``` ```jsx /* App.jsx */ import "./styles.css"; export default () => <div className="button" />; ``` - [#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. - [#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. ```html <!-- Invalid: empty heading --> <h1></h1> <!-- Invalid: heading hidden from screen readers --> <h1 aria-hidden="true">invisible content</h1> <!-- Valid: heading with text content --> <h1>heading</h1> <!-- Valid: heading with accessible name --> <h1 aria-label="Screen reader content"></h1> ``` - [#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. ```html <!-- Invalid: onmouseover without onfocus --> <div onmouseover="handleMouseOver()"></div> <!-- Valid: onmouseover paired with onfocus --> <div onmouseover="handleMouseOver()" onfocus="handleFocus()"></div> ``` - [#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`. - [#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/), which enforces a style for exporting types. This is the same option as the one provided by `useImportType`. - [#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. - [#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. - [#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. **Invalid**: ```html <div onclick="myFunction()"></div> ``` - [#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). 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. - [#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. With the option enabled, the following example is considered valid and is ignored by the rule: ```js const truthy = !!value; ``` - [#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. 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. Here's what Biome is able to resolve: - Variables and types used in JavaScript modules, defined in the same file or imported from another module. - JSX Components used in JavaScript modules, defined in the same file or imported from another module. - CSS classes used in JSX and HTML-ish files (Vue, Svelte and Astro), and defined in CSS files. - Components used in HTML-ish files and defined in other HTML-ish. - Variables used in HTML-ish files and defined in the same file or imported from another module (JavaScript or HTML-ish). - [#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. For example, the following configuration... ```json { "assist": { "actions": { "source": { "organizeImports": { "level": "on", "options": { "groups": ["**", "!:STYLE:"], "sortBareImports": true } } } } } } ``` ...places style imports last: ```diff - import "./style.css" import A from "./a.js" + import "./style.css" ``` - [#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. This rule now supports imports of packages that are defined only in `bundleDependencies` and `bundledDependencies` arrays. - [#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. **Invalid** ```html <input type="text" id="name" name="name" /> ``` - [#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. - [#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`. **Example plugin** (`useConsoleInfo.grit`): ```grit language js `console.log($msg)` as $call where { register_diagnostic(span = $call, message = "Use console.info instead of console.log.", severity = "warn", fix_kind = "safe"), $call => `console.info($msg)` } ``` Running `biome check --write` applies safe rewrites. Unsafe rewrites (the default, or `fix_kind = "unsafe"`) still require `--write --unsafe`. - [#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/), which allows bare imports to be sorted within other imports when set to `false`. ```json { "assist": { "actions": { "source": { "organizeImports": { "level": "on", "options": { "sortBareImports": true } } } } } } ``` ```diff - import "b"; import "a"; + import "b"; import { A } from "a"; + import "./file"; import { Local } from "./file"; - import "./file"; ``` - [#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. - [#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. - [#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. - [#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. ```html <!-- Invalid: meta does not support aria attributes --> <meta charset="UTF-8" role="meta" /> ``` - [#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. ```html <div tabindex="0">Invalid: non-interactive element</div> ` ``` - [#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. ```html <!-- Invalid: role="button" is redundant on <button> --> <button role="button"></button> ``` - [#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. The following presets are available: - `"recommended"`: it enables all Biome-recommended rules, or recommended rules of a group; - `"all"`: it enables all Biome rules, or enables all rules of a group; - `"none"`: it disables all Biome rules, or disable all rules of a group. You can enable recommended rules: ```json { "linter": { "rules": { "preset": "recommended" } } } ``` You can enable **all rules** at once: ```json5 { linter: { rules: { preset: "all", // enables all rules }, }, } ``` Or enable all rules for a group: ```json5 { linter: { rules: { style: { preset: "all", // enables all rules in the style group }, }, }, } ``` This new option, however, doesn't affect how nursery rules work. Nursery rules must be enabled singularly, due to their nature. This new option is meant to replace `recommended`, so make sure to run the `migrate` command. - [#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. **Invalid**: ```html <h1 role="checkbox"></h1> ``` - [#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`. - [#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. **Invalid**: ```html <input role="img" /> ``` - [#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`. **Invalid**: ```graphql query { name age id } ``` - [#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" }`). For example, with the following configuration: ```json { "assist": { "actions": { "source": { "organizeImports": { "level": "on", "options": { "sortBareImports": true, "groups": [ { "kind": "!bare" }, ":BLANK_LINE:", { "kind": "bare" } ] } } } } } } ``` ...the following code: ```ts import "./register-my-component"; import { render } from "react-dom"; import "./polyfill"; import { Button } from "@/components/Button"; ``` ...is organized as: ```ts import { render } from "react-dom"; import { Button } from "@/components/Button"; import "./polyfill"; import "./register-my-component"; ``` - [#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. ```json { "plugins": [ "global-plugin.grit", { "path": "scoped-plugin.grit", "includes": ["src/**/*.ts", "!**/*.test.ts"] } ] } ``` - [#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. - [#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. ```html <!-- Invalid: aria-hidden on a focusable element --> <button aria-hidden="true">Submit</button> <!-- Valid: aria-hidden on a non-focusable element --> <div aria-hidden="true">decorative content</div> ``` - [#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. For example, the following code is now flagged: ```html <div role="navigation"></div> ``` The rule suggests using `<nav>` instead. - [#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. - [#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"`. - [#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. Four rules were renamed as part of the promotion: - `noFloatingClasses` is now [`noUnusedInstantiation`](https://biomejs.dev/linter/rules/no-unused-instantiation/), because the rule checks any discarded `new` expression, not only classes. - `noMultiStr` is now [`noMultilineString`](https://biomejs.dev/linter/rules/no-multiline-string/). - `useFind` is now [`useArrayFind`](https://biomejs.dev/linter/rules/use-array-find/). - `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. #### Correctness Promoted the following rules to the `correctness` group: - [`noBeforeInteractiveScriptOutsideDocument`](https://biomejs.dev/linter/rules/no-before-interactive-script-outside-document/) - [`noUnusedInstantiation`](https://biomejs.dev/linter/rules/no-unused-instantiation/) - [`useInlineScriptId`](https://biomejs.dev/linter/rules/use-inline-script-id/) (recommended, Next.js domain) - [`noVueVIfWithVFor`](https://biomejs.dev/linter/rules/no-vue-v-if-with-v-for/) (recommended, Vue domain) - [`useVueValidVBind`](https://biomejs.dev/linter/rules/use-vue-valid-v-bind/) (recommended, Vue domain) - [`useVueValidVElse`](https://biomejs.dev/linter/rules/use-vue-valid-v-else/) (recommended, Vue domain) - [`useVueValidVElseIf`](https://biomejs.dev/linter/rules/use-vue-valid-v-else-if/) (recommended, Vue domain) - [`useVueValidVHtml`](https://biomejs.dev/linter/rules/use-vue-valid-v-html/) (recommended, Vue domain) - [`useVueValidVIf`](https://biomejs.dev/linter/rules/use-vue-valid-v-if/) (recommended, Vue domain) - [`useVueValidVOn`](https://biomejs.dev/linter/rules/use-vue-valid-v-on/) (recommended, Vue domain) - [`useVueValidVText`](https://biomejs.dev/linter/rules/use-vue-valid-v-text/) (recommended, Vue domain) - [`useVueValidTemplateRoot`](https://biomejs.dev/linter/rules/use-vue-valid-template-root/) (recommended, Vue domain) - [`useVueValidVCloak`](https://biomejs.dev/linter/rules/use-vue-valid-v-cloak/) (recommended, Vue domain) - [`useVueValidVOnce`](https://biomejs.dev/linter/rules/use-vue-valid-v-once/) (recommended, Vue domain) - [`useVueValidVPre`](https://biomejs.dev/linter/rules/use-vue-valid-v-pre/) (recommended, Vue domain) - [`useVueVForKey`](https://biomejs.dev/linter/rules/use-vue-v-for-key/) (recommended, Vue domain) - [`noDuplicateAttributes`](https://biomejs.dev/linter/rules/no-duplicate-attributes/) (recommended) - [`noDuplicateArgumentNames`](https://biomejs.dev/linter/rules/no-duplicate-argument-names/) (recommended) - [`noDuplicateInputFieldNames`](https://biomejs.dev/linter/rules/no-duplicate-input-field-names/) (recommended) - [`noDuplicateVariableNames`](https://biomejs.dev/linter/rules/no-duplicate-variable-names/) (recommended) - [`noDuplicateEnumValueNames`](https://biomejs.dev/linter/rules/no-duplicate-enum-value-names/) (recommended) - [`useLoneAnonymousOperation`](https://biomejs.dev/linter/rules/use-lone-anonymous-operation/) (recommended) #### Suspicious Promoted the following rules to the `suspicious` group: - [`noShadow`](https://biomejs.dev/linter/rules/no-shadow/) - [`noUnnecessaryConditions`](https://biomejs.dev/linter/rules/no-unnecessary-conditions/) - [`noParametersOnlyUsedInRecursion`](https://biomejs.dev/linter/rules/no-parameters-only-used-in-recursion/) - [`noUnknownAttribute`](https://biomejs.dev/linter/rules/no-unknown-attribute/) - [`useArraySortCompare`](https://biomejs.dev/linter/rules/use-array-sort-compare/) - [`noForIn`](https://biomejs.dev/linter/rules/no-for-in/) - [`noDuplicatedSpreadProps`](https://biomejs.dev/linter/rules/no-duplicated-spread-props/) - [`noEqualsToNull`](https://biomejs.dev/linter/rules/no-equals-to-null/) - [`noProto`](https://biomejs.dev/linter/rules/no-proto/) (recommended) - [`noUndeclaredEnvVars`](https://biomejs.dev/linter/rules/no-undeclared-env-vars/) (recommended, Turborepo domain) - [`noReturnAssign`](https://biomejs.dev/linter/rules/no-return-assign/) (default severity: `error`) - [`noDuplicateEnumValues`](https://biomejs.dev/linter/rules/no-duplicate-enum-values/) (recommended) - [`noVueArrowFuncInWatch`](https://biomejs.dev/linter/rules/no-vue-arrow-func-in-watch/) (recommended, Vue domain) - [`noNestedPromises`](https://biomejs.dev/linter/rules/no-nested-promises/) - [`noLeakedRender`](https://biomejs.dev/linter/rules/no-leaked-render/) - [`noDeprecatedMediaType`](https://biomejs.dev/linter/rules/no-deprecated-media-type/) (recommended) - [`noDuplicateGraphqlOperationName`](https://biomejs.dev/linter/rules/no-duplicate-graphql-operation-name/) - [`useRequiredScripts`](https://biomejs.dev/linter/rules/use-required-scripts/) #### Style Promoted the following rules to the `style` group: - [`useVueMultiWordComponentNames`](https://biomejs.dev/linter/rules/use-vue-multi-word-component-names/) (recommended, Vue domain) - [`useVueDefineMacrosOrder`](https://biomejs.dev/linter/rules/use-vue-define-macros-order/) - [`noIncrementDecrement`](https://biomejs.dev/linter/rules/no-increment-decrement/) - [`noContinue`](https://biomejs.dev/linter/rules/no-continue/) - [`useSpreadOverApply`](https://biomejs.dev/linter/rules/use-spread-over-apply/) - [`noTernary`](https://biomejs.dev/linter/rules/no-ternary/) - [`noMultilineString`](https://biomejs.dev/linter/rules/no-multiline-string/) - [`noMultiAssign`](https://biomejs.dev/linter/rules/no-multi-assign/) - [`noExcessiveClassesPerFile`](https://biomejs.dev/linter/rules/no-excessive-classes-per-file/) - [`noExcessiveLinesPerFile`](https://biomejs.dev/linter/rules/no-excessive-lines-per-file/) - [`noVueOptionsApi`](https://biomejs.dev/linter/rules/no-vue-options-api/) - [`useErrorCause`](https://biomejs.dev/linter/rules/use-error-cause/) - [`useConsistentEnumValueType`](https://biomejs.dev/linter/rules/use-consistent-enum-value-type/) - [`useConsistentMethodSignatures`](https://biomejs.dev/linter/rules/use-consistent-method-signatures/) - [`useGlobalThis`](https://biomejs.dev/linter/rules/use-global-this/) (default severity: `warn`) - [`useDestructuring`](https://biomejs.dev/linter/rules/use-destructuring/) - [`useVueHyphenatedAttributes`](https://biomejs.dev/linter/rules/use-vue-hyphenated-attributes/) (recommended, Vue domain) - [`useVueConsistentVBindStyle`](https://biomejs.dev/linter/rules/use-vue-consistent-v-bind-style/) (recommended, Vue domain) - [`useVueConsistentVOnStyle`](https://biomejs.dev/linter/rules/use-vue-consistent-v-on-style/) (recommended, Vue domain) - [`noHexColors`](https://biomejs.dev/linter/rules/no-hex-colors/) - [`useConsistentGraphqlDescriptions`](https://biomejs.dev/linter/rules/use-consistent-graphql-descriptions/) - [`noRootType`](https://biomejs.dev/linter/rules/no-root-type/) - [`useLoneExecutableDefinition`](https://biomejs.dev/linter/rules/use-lone-executable-definition/) - [`useInputName`](https://biomejs.dev/linter/rules/use-input-name/) #### Complexity Promoted the following rules to the `complexity` group: - [`useArrayFind`](https://biomejs.dev/linter/rules/use-array-find/) - [`noRedundantDefaultExport`](https://biomejs.dev/linter/rules/no-redundant-default-export/) (default severity: `warn`) - [`noUselessReturn`](https://biomejs.dev/linter/rules/no-useless-return/) - [`noDivRegex`](https://biomejs.dev/linter/rules/no-div-regex/) #### Performance Promoted the following rules to the `performance` group: - [`noSyncScripts`](https://biomejs.dev/linter/rules/no-sync-scripts/) - [`noJsxPropsBind`](https://biomejs.dev/linter/rules/no-jsx-props-bind/) - [`useVueVapor`](https://biomejs.dev/linter/rules/use-vue-vapor/) #### Security Promoted the following rules to the `security` group: - [`noScriptUrl`](https://biomejs.dev/linter/rules/no-script-url/) (recommended) #### A11y Promoted the following rules to the `a11y` group: - [`noAmbiguousAnchorText`](https://biomejs.dev/linter/rules/no-ambiguous-anchor-text/) (recommended) - [#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. - [#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. For example, unused classes as well as all unused variables, functions, etc. called "unused" may be ignored entirely with the following configuration: ```json { "ignore": { "*": ["unused"], "class": ["*"] } } ``` - [#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. ```html <label></label> ``` - [#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. ```html <a href="#" aria-checked></a> ``` - [#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`. ```diff - callFn(foo) + callFn( foo ) ``` ```diff - const arr = [1, 2, 3]; + const arr = [ 1, 2, 3 ]; ``` ##### JavaScript 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. ```diff - if (condition) {} + if ( condition ) {} ``` ```diff - `Hello ${name}!` + `Hello ${ name }!` ``` ##### JSX 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. ```diff - <Foo bar={value} /> + <Foo bar={ value } /> ``` ##### TypeScript 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. ```diff - type Result = Map<string, number>; + type Result = Map< string, number >; ``` ##### JSON When enabled, Biome inserts spaces inside square brackets when the content fits on a single line. Empty brackets are not affected. ```diff - [1, 2, 3] + [ 1, 2, 3 ] ``` ##### CSS When enabled, Biome inserts spaces inside parentheses and square brackets when the content fits on a single line. Empty delimiters are not affected. ```diff - rgba(0, 0, 0, 1) + rgba( 0, 0, 0, 1 ) ``` ```diff - [data-attr] + [ data-attr ] ``` - [#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. - [#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`). ```json { "linter": { "rules": { "style": { "useNumericSeparators": { "level": "error", "options": { "decimal": { "minimumDigits": 7, "groupLength": 3 }, "hexadecimal": { "minimumDigits": 4, "groupLength": 2 } } } } } } } ``` - [#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. **Invalid**: ```html <div role="button"></div> ``` - [#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. **Invalid**: ```html <div onclick="myFunction()">button</div> ``` - [#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. **Invalid**: ```graphql enum Role { SUPER_ADMIN ADMIN USER GOD } ``` - [#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. ```html <input autocomplete="incorrect" /> ``` ### Patch Changes - [#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. For example, the following snippet triggers the rule by default. ```jsx const MyComponent = (props) => { return <div>{props.name}</div>; }; ``` - [#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. - [#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. - [#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. - [#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. - [#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. - [#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. - [#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";`. - [#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. ```diff .grid { grid-template-areas: /* row */ - "header header" - "footer footer"; + "header header" + "footer footer"; } ``` - [#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. - [#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. - [#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.). - [#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/). The rule now reports more precisely the range of the `@ts-ignore` comment. - [#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. - [#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. - [#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. - [#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. - [#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. For example, the package `globby` is reported because there's a better alternative: ```js import glob from "globby"; ``` ```json { "dependencies": { "globby": "x.x.x" } } ``` - [#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`. - [#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: ```js function f(visitor) { let ctrl = visitor(); for (const x of [0]) ctrl = ctrl(); } ``` - [#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 `;`. ```diff .selector { - padding/* name */: 1px; - color: red !important /* note */; + padding/* name */ : 1px; + color: red !important /* note */ ; } ``` - [#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. - [#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)`. - [#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. - [#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`. - [#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. - [`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}"`. - [`useButtonType`](https://biomejs.dev/linter/rules/use-button-type/) no longer emits false positives for dynamic button types written as `type="{dynamicType}"`. - [`noScriptUrl`](https://biomejs.dev/linter/rules/no-script-url/) no longer emits false positives for dynamic hrefs such as `href="{url}"`. - [#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}`. - [#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. ## What's Changed * feat(css): support SCSS qualified names in values and function calls by @denbezrukov in https://github.com/biomejs/biome/pull/9096 * feat(css): add unary expression parsing by @denbezrukov in https://github.com/biomejs/biome/pull/9093 * feat(css): support scss nesting declarations in declaration lists by @denbezrukov in https://github.com/biomejs/biome/pull/9135 * feat(css): allow scss declarations in @page blocks by @denbezrukov in https://github.com/biomejs/biome/pull/9139 * feat(css): allow delimiters in bracketed value lists by @denbezrukov in https://github.com/biomejs/biome/pull/9145 * feat(analyze/json): useSortedPackageJson by @ematipico in https://github.com/biomejs/biome/pull/9134 * feat: two new cross language rules by @ematipico in https://github.com/biomejs/biome/pull/9152 * feat(js-api): add spanInBytesToSpanInCodeUnits helper function by @ash1day in https://github.com/biomejs/biome/pull/8944 * feat: collect local and global styles for `noUndeclearedClasses` by @ematipico in https://github.com/biomejs/biome/pull/9297 * feat(organizeImports): add `sortBareImports` option by @Conaclos in https://github.com/biomejs/biome/pull/9384 * chore: merge main to next by @ematipico in https://github.com/biomejs/biome/pull/9443 * feat(linter): add includes option for plugin file scoping by @chocky335 in https://github.com/biomejs/biome/pull/9171 * feat(cli): add ANSI art Biome logo by @ematipico in https://github.com/biomejs/biome/pull/9533 * feat(biome_service): support applying GritQL plugin rewrites via --write by @chocky335 in https://github.com/biomejs/biome/pull/9073 * feat(lint): add ignore option to no-unused-variables by @mvarendorff in https://github.com/biomejs/biome/pull/9397 * feat(biome_html_analyze): port noRedundantRoles a11y rule to HTML in https://github.com/biomejs/biome/pull/9564 * revert: feat(biome_html_analyze): port noRedundantRoles a11y rule to HTML by @dyc3 in https://github.com/biomejs/biome/pull/9587 * feat(html/a11y): add noRedundantRoles rule for HTML by @IxxyDev in https://github.com/biomejs/biome/pull/9276 * feat(cli): concise reporter by @ematipico in https://github.com/biomejs/biome/pull/9539 * feat(biome_html_analyze): port useKeyWithMouseEvents a11y rule to HTML by @rahuld109 in https://github.com/biomejs/biome/pull/9582 * chore: fix `next` failures by @dyc3 in https://github.com/biomejs/biome/pull/9633 * feat(biome_html_analyze): port useAriaActivedescendantWithTabindex to HTML by @faizkhairi in https://github.com/biomejs/biome/pull/9617 * feat(lint): port useValidAnchor to html by @DerTimonius in https://github.com/biomejs/biome/pull/8987 * feat: improve noUndeclaredClasses by @ematipico in https://github.com/biomejs/biome/pull/9503 * feat(biome_html_analyze): port useHeadingContent a11y rule to HTML by @faizkhairi in https://github.com/biomejs/biome/pull/9716 * feat(formatter): add delimiterSpacing option by @luisherranz in https://github.com/biomejs/biome/pull/9718 * feat(assist): implement useSortedAttributes for HTML by @mujpao in https://github.com/biomejs/biome/pull/9547 * feat(html/a11y): port noAriaUnsupportedElements to HTML by @IxxyDev in https://github.com/biomejs/biome/pull/9491 * feat(assist): use sorted type fields 9137 by @ff1451 in https://github.com/biomejs/biome/pull/9275 * feat(html_analyze): port useValidAriaProps rule to HTML by @Maximiliano-Zeballos in https://github.com/biomejs/biome/pull/9761 * feat(html): port noAriaHiddenOnFocusable a11y rule to HTML by @aviraldua93 in https://github.com/biomejs/biome/pull/9496 * docs: remove duplicate sentence by @Netail in https://github.com/biomejs/biome/pull/9832 * fix: assist generator by @Netail in https://github.com/biomejs/biome/pull/9831 * feat(cli): add watch mode (--watch) to the CLI for check/format/lint commands by @siketyan in https://github.com/biomejs/biome/pull/8731 * refactor: improve watch mode by @ematipico in https://github.com/biomejs/biome/pull/9859 * feat(cli): add `upgrade` command by @nhedger in https://github.com/biomejs/biome/pull/9546 * chore: extra rule sources by @Netail in https://github.com/biomejs/biome/pull/9872 * feat(graphql_analyze): implement useSortedSelectionSet by @Netail in https://github.com/biomejs/biome/pull/9853 * feat(html): port useValidAriaValues a11y rule to HTML by @aviraldua93 in https://github.com/biomejs/biome/pull/9928 * chore: merge `main` into `next` by @dyc3 in https://github.com/biomejs/biome/pull/9945 * feat(lint/html): port noExcessiveLinesPerFile to html by @dyc3 in https://github.com/biomejs/biome/pull/9967 * docs(organizeImports): revamp user-facing docs by @Conaclos in https://github.com/biomejs/biome/pull/9887 * ci: update snapshots by @Conaclos in https://github.com/biomejs/biome/pull/9986 * chore: abstract html tag matcher (main into next) by @Netail in https://github.com/biomejs/biome/pull/9993 * feat(linter): add noNonInteractiveTabIndex for HTML by @viraxslot in https://github.com/biomejs/biome/pull/9306 * feat(html_analyze): implement noNoninteractiveElementToInteractiveRole by @Netail in https://github.com/biomejs/biome/pull/10022 * feat(html_analyze): implement noInteractiveElementToNoninteractiveRole by @Netail in https://github.com/biomejs/biome/pull/10028 * feat(html_analyze): implement useValidAutocomplete by @Netail in https://github.com/biomejs/biome/pull/10013 * feat(html_analyze): implement noNoninteractiveElementInteractions by @Netail in https://github.com/biomejs/biome/pull/10026 * feat(js-formatter): implement delimiterSpacing for JavaScript by @luisherranz in https://github.com/biomejs/biome/pull/9719 * fix: next branch ci (+ main into next) by @Netail in https://github.com/biomejs/biome/pull/10051 * feat(html_analyze): implement useAriaPropsSupportedByRole by @Netail in https://github.com/biomejs/biome/pull/10015 * feat(linter): preset by @ematipico in https://github.com/biomejs/biome/pull/9813 * feat(organizeImports): add :STYLE: group matcher by @Conaclos in https://github.com/biomejs/biome/pull/10070 * feat(lint): support pnpm catalogs by @apple-yagi in https://github.com/biomejs/biome/pull/8396 * feat(html_analyze): implement useFocusableInteractive by @Netail in https://github.com/biomejs/biome/pull/10067 * feat(html): port useKeyWithClickEvents a11y rule to HTML by @aviraldua93 in https://github.com/biomejs/biome/pull/9495 * feat(html_analyze): port useSemanticElements a11y rule to HTML by @Maximiliano-Zeballos in https://github.com/biomejs/biome/pull/9792 * feat(js-formatter): implement delimiterSpacing for JSX by @luisherranz in https://github.com/biomejs/biome/pull/9720 * feat(js-formatter): implement delimiterSpacing for TypeScript by @luisherranz in https://github.com/biomejs/biome/pull/9721 * feat(json-formatter): implement delimiterSpacing for JSON by @luisherranz in https://github.com/biomejs/biome/pull/9723 * feat(html_analyze): port noLabelWithoutControl by @Netail in https://github.com/biomejs/biome/pull/10089 * chore: merge main into next by @Netail in https://github.com/biomejs/biome/pull/10104 * feat(migrate): map ESLint spacing rules to delimiterSpacing by @luisherranz in https://github.com/biomejs/biome/pull/9724 * feat(css-formatter): implement delimiterSpacing for CSS by @luisherranz in https://github.com/biomejs/biome/pull/9722 * feat(biome_js_analyze): add `bundleDependencies` option to `NoUndeclaredDependencies` rule by @mdrobny in https://github.com/biomejs/biome/pull/9170 * fix: workspace generation by @Netail in https://github.com/biomejs/biome/pull/10107 * feat(html_analyze): implement noStaticElementInteractions by @Netail in https://github.com/biomejs/biome/pull/10069 * feat: implement useSortedEnumMembers by @Netail in https://github.com/biomejs/biome/pull/10000 * feat(organizeImports): add `kind` field to import matcher by @georgephillips in https://github.com/biomejs/biome/pull/10074 * chore: main into next by @Netail in https://github.com/biomejs/biome/pull/10142 * chore: changeset corrections by @Netail in https://github.com/biomejs/biome/pull/10145 * fix: align HTML & JS a11y sources by @Netail in https://github.com/biomejs/biome/pull/10120 * feat(lint): add rule options for `noImplicitCoercions` to ignore double negations by @Bertie690 in https://github.com/biomejs/biome/pull/9309 * docs: incorrect markdown by @ematipico in https://github.com/biomejs/biome/pull/10186 * feat(core): handle svg files by @ematipico in https://github.com/biomejs/biome/pull/10106 * feat(config): expose `html.parser.vue` by @dyc3 in https://github.com/biomejs/biome/pull/9366 * chore: refactor delimiterSpacing changesets by @ematipico in https://github.com/biomejs/biome/pull/10234 * perf(core): cache analyzer visitor by @ematipico in https://github.com/biomejs/biome/pull/10204 * feat: go-to definition (#9619) by @ematipico in https://github.com/biomejs/biome/pull/9700 * chore: merge main into next by @ematipico in https://github.com/biomejs/biome/pull/10316 * feat(core): respect git info exclude files by @jongwan56 in https://github.com/biomejs/biome/pull/10121 * feat(useNumericSeparators): add options for minimum digits and group length by @dyc3 in https://github.com/biomejs/biome/pull/9571 * chore: merge into next by @ematipico in https://github.com/biomejs/biome/pull/10435 * refactor: use salsa by @ematipico in https://github.com/biomejs/biome/pull/10315 * chore: merge main into next by @ematipico in https://github.com/biomejs/biome/pull/10453 * chore: enable unstable features on preview builds for playground by @siketyan in https://github.com/biomejs/biome/pull/10485 * ci: enable automation jobs by @ematipico in https://github.com/biomejs/biome/pull/10443 * feat(lint): add ignoreMixedLogicalExpressions option to useNullishCoa… by @pkallos in https://github.com/biomejs/biome/pull/9974 * fix(parser/yaml): correctly lex anchor/tag properties followed by a sequence by @siketyan in https://github.com/biomejs/biome/pull/10481 * fix(markdown_parser): keep loose list across empty item before blank line by @jfmcdowell in https://github.com/biomejs/biome/pull/10483 * fix(lint/noUnnecessaryConditions): extend detection coverage by @IxxyDev in https://github.com/biomejs/biome/pull/10108 * chore: merge main into next by @ematipico in https://github.com/biomejs/biome/pull/10500 * fix(html-parser): allow omitting binding in Svelte {:then} and {:catch} blocks by @Mokto in https://github.com/biomejs/biome/pull/10487 * ci: correct token for removing label by @ematipico in https://github.com/biomejs/biome/pull/10511 * fix(css_parser): parse semicolonless scss rules by @denbezrukov in https://github.com/biomejs/biome/pull/10509 * chore(deps): update rust crate jiff to 0.2.28 by @renovate[bot] in https://github.com/biomejs/biome/pull/10521 * chore(deps): update rust crate serde_json to 1.0.150 by @renovate[bot] in https://github.com/biomejs/biome/pull/10522 * chore(deps): update github-actions by @renovate[bot] in https://github.com/biomejs/biome/pull/10524 * chore(deps): update pnpm to v11.4.0 by @renovate[bot] in https://github.com/biomejs/biome/pull/10525 * ci: remove cli benchmark by @ematipico in https://github.com/biomejs/biome/pull/10526 * fix(css_parser): support interpolated dashed identifiers in function at-rules by @denbezrukov in https://github.com/biomejs/biome/pull/10518 * fix(parser/yaml): lex DIRECTIVE_END in stream by @siketyan in https://github.com/biomejs/biome/pull/10480 * fix(parser/yaml): lex directives by @siketyan in https://github.com/biomejs/biome/pull/10484 * fix(parse/js/vue): allow v-on directives with multiple inline statements by @dyc3 in https://github.com/biomejs/biome/pull/10520 * feat(core): implement YAML file handler by @siketyan in https://github.com/biomejs/biome/pull/10527 * fix(useImportType): always separate types from default named imports by @Conaclos in https://github.com/biomejs/biome/pull/10530 * fix(css_formatter): preserve declaration comment boundaries by @denbezrukov in https://github.com/biomejs/biome/pull/10532 * feat(formatter/yaml): initial implementation for simple block mappings by @siketyan in https://github.com/biomejs/biome/pull/10528 * feat(formatter/yaml): initial implementation for block sequences by @siketyan in https://github.com/biomejs/biome/pull/10529 * feat(tailwind_parser): parse Tailwind variant expressions by @jiwon79 in https://github.com/biomejs/biome/pull/10448 * chore(deps): update github-actions (major) by @renovate[bot] in https://github.com/biomejs/biome/pull/10538 * fix(svelte_parser): support destructuring rename bindings in {#each} blocks by @Mokto in https://github.com/biomejs/biome/pull/10491 * perf: reduce allocations in noExcessiveLinesPerFile rules by @ematipico in https://github.com/biomejs/biome/pull/10506 * feat(html/nursery): add useSvelteRequireEachKey rule by @Mokto in https://github.com/biomejs/biome/pull/10503 * fix(diagnostics): truncate diagnostics that are super long to keep output readable by @dyc3 in https://github.com/biomejs/biome/pull/10539 * feat(lint/useIterableCallbackReturn): add allowImplicit option #9445 by @TXWSLYF in https://github.com/biomejs/biome/pull/10461 * fix(css-parser): allow comma-separated selector lists inside :global() and :local() by @Mokto in https://github.com/biomejs/biome/pull/10490 * fix(linter): recognize contrast-color() as a known CSS function by @tim-we in https://github.com/biomejs/biome/pull/10546 * fix(parse/html): don't bother tracking unicode escape sequences by @dyc3 in https://github.com/biomejs/biome/pull/10542 * fix(cli): emit rdjson code suggestion replacements by @mangod12 in https://github.com/biomejs/biome/pull/10543 * refactor(organizeImports): require `sortBareImports` for bare matchers by @Conaclos in https://github.com/biomejs/biome/pull/10517 * feat(linter): implement useIncludes rule by @Dotify71 in https://github.com/biomejs/biome/pull/10516 * fix(html-parser): allow TypeScript as const in Svelte {#each} expressions by @Mokto in https://github.com/biomejs/biome/pull/10489 * chore: add SCSS in unstable wasm build by @denbezrukov in https://github.com/biomejs/biome/pull/10551 * test(css_formatter): sync Prettier CSS and SCSS fixtures by @denbezrukov in https://github.com/biomejs/biome/pull/10554 * chore: merge main into next by @ematipico in https://github.com/biomejs/biome/pull/10553 * chore: biome v2.5 by @ematipico in https://github.com/biomejs/biome/pull/9277 * fix: avoid infinite recursion by passing depth to resolve_callee_to_function by @ematipico in https://github.com/biomejs/biome/pull/10556 * fix(css_formatter): add spacing SCSS binary expressions by @denbezrukov in https://github.com/biomejs/biome/pull/10537 * feat: noRestrictedDependencies by @Netail in https://github.com/biomejs/biome/pull/10467 * feat: rule promotion for v2.5 by @ematipico in https://github.com/biomejs/biome/pull/10562 * fix(useVueConsistentVBindStyle): don't flag v-bind directives that don't have arguments by @dyc3 in https://github.com/biomejs/biome/pull/10565 * fix(useVueHyphenatedAttributes): only run in vue files, exclude svgs and their children by @dyc3 in https://github.com/biomejs/biome/pull/10566 * docs: replace "allows to" with "allows you to" in formatter comments by @dfedoryshchev in https://github.com/biomejs/biome/pull/10507 * feat(useExportType): add style option by @Conaclos in https://github.com/biomejs/biome/pull/10561 * refactor(useExportType): improve docs and code by @Conaclos in https://github.com/biomejs/biome/pull/10569 * refactor(noTsIgnore): avoid one alloc, improve range reporting by @Conaclos in https://github.com/biomejs/biome/pull/10570 * fix(css_parser): parse SCSS bracketed expression lists by @denbezrukov in https://github.com/biomejs/biome/pull/10567 * fix(a11y): useAriaPropsForRole no longer false-positives on Vue v-bind shorthand 🤖🤖🤖 by @harsha-cpp in https://github.com/biomejs/biome/pull/10568 * fix(css_formatter): indent broken SCSS string concatenation by @denbezrukov in https://github.com/biomejs/biome/pull/10571 * fix(css_formatter): preserve SCSS grid template rows by @denbezrukov in https://github.com/biomejs/biome/pull/10572 * feat(css_parser): parse interpolated scss media conditions by @denbezrukov in https://github.com/biomejs/biome/pull/10573 * feat(css_formatter): expand compound SCSS variable lists by @denbezrukov in https://github.com/biomejs/biome/pull/10577 * fix: docs and readme by @ematipico in https://github.com/biomejs/biome/pull/10584 * feat(css): parse dynamic SCSS keyframes names by @denbezrukov in https://github.com/biomejs/biome/pull/10587 * fix(markdown): remove unused hard_line slot from MdParagraph by @jfmcdowell in https://github.com/biomejs/biome/pull/10593 * feat(css_parser): parse SCSS variables in keyframes by @denbezrukov in https://github.com/biomejs/biome/pull/10598 * feat(css_formatter): improve SCSS variable declaration formatting by @denbezrukov in https://github.com/biomejs/biome/pull/10597 * chore(deps): update dependency @types/node to v24.13.1 by @renovate[bot] in https://github.com/biomejs/biome/pull/10579 * chore(deps): update github-actions by @renovate[bot] in https://github.com/biomejs/biome/pull/10580 * chore(deps): update rust to v1.96.0 by @renovate[bot] in https://github.com/biomejs/biome/pull/10582 * chore(deps): update pnpm to v11.5.2 by @renovate[bot] in https://github.com/biomejs/biome/pull/10581 * test(md): cover loose list + mixed space-tab sublist in fuzz corpus by @jfmcdowell in https://github.com/biomejs/biome/pull/10594 * feat(css_formatter): keep SCSS scalar parentheses inline by @denbezrukov in https://github.com/biomejs/biome/pull/10599 * fix(markdown): remove dead syntax kinds and fix bogus node handling by @jfmcdowell in https://github.com/biomejs/biome/pull/10600 * fix(markdown): reset link-definition continuation when a block quote opens by @jfmcdowell in https://github.com/biomejs/biome/pull/10601 * fix(css_parser): parse comma-separated composes values by @xsourabhsharma in https://github.com/biomejs/biome/pull/10591 * fix(biome_configuration): avoid Markdown links in JSON schema descriptions by @mvanhorn in https://github.com/biomejs/biome/pull/10589 * fix(lint): detect imported process env usage by @ShaharAviram1 in https://github.com/biomejs/biome/pull/10470 * feat(fmt/md): improve formatting of list against prettier by @ematipico in https://github.com/biomejs/biome/pull/10383 * feat(html_parser): parse Svelte interpolations in quoted attribute values by @Mokto in https://github.com/biomejs/biome/pull/10555 * refactor: removes mutex from salsa db by @ematipico in https://github.com/biomejs/biome/pull/10608 * feat(css_parser): parse interpolated SCSS supports conditions by @denbezrukov in https://github.com/biomejs/biome/pull/10602 * fix(css_formatter): align grid-template-areas rows after comments by @denbezrukov in https://github.com/biomejs/biome/pull/10603 * 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 * feat(lint): add useFunctionComponentDefinition rule by @citadelgrad in https://github.com/biomejs/biome/pull/10498 * ci: release by @github-actions[bot] in https://github.com/biomejs/biome/pull/10499 ## New Contributors * @ash1day made their first contribution in https://github.com/biomejs/biome/pull/8944 * @mvarendorff made their first contribution in https://github.com/biomejs/biome/pull/9397 * @IxxyDev made their first contribution in https://github.com/biomejs/biome/pull/9276 * @faizkhairi made their first contribution in https://github.com/biomejs/biome/pull/9617 * @luisherranz made their first contribution in https://github.com/biomejs/biome/pull/9718 * @Maximiliano-Zeballos made their first contribution in https://github.com/biomejs/biome/pull/9761 * @aviraldua93 made their first contribution in https://github.com/biomejs/biome/pull/9496 * @apple-yagi made their first contribution in https://github.com/biomejs/biome/pull/8396 * @mdrobny made their first contribution in https://github.com/biomejs/biome/pull/9170 * @georgephillips made their first contribution in https://github.com/biomejs/biome/pull/10074 * @jongwan56 made their first contribution in https://github.com/biomejs/biome/pull/10121 * @Mokto made their first contribution in https://github.com/biomejs/biome/pull/10487 * @TXWSLYF made their first contribution in https://github.com/biomejs/biome/pull/10461 * @mangod12 made their first contribution in https://github.com/biomejs/biome/pull/10543 * @harsha-cpp made their first contribution in https://github.com/biomejs/biome/pull/10568 * @xsourabhsharma made their first contribution in https://github.com/biomejs/biome/pull/10591 * @ShaharAviram1 made their first contribution in https://github.com/biomejs/biome/pull/10470 * @citadelgrad made their first contribution in https://github.com/biomejs/biome/pull/10498 **Full Changelog**: https://github.com/biomejs/biome/compare/@biomejs/biome@2.4.16...@biomejs/biome@2.5.0 ### [`plugin-react@6.0.2`](https://github.com/vitejs/vite-plugin-react/releases/tag/plugin-react%406.0.2): @vitejs/plugin-react: plugin-react@6.0.2 [Compare source](https://github.com/vitejs/vite-plugin-react/compare/6.0.2...plugin-react@6.0.2) ### Allow all options in reactCompilerPreset ([#1189](https://github.com/vitejs/vite-plugin-react/pull/1189)) This is a type only change. Only `compilationMode` and `target` options were available for `reactCompilerPreset`. ### [`v8.1.0`](https://github.com/vitejs/vite/releases/tag/v8.1.0): vite: v8.1.0 [Compare source](https://github.com/vitejs/vite/compare/8.0.16...v8.1.0) Please refer to [CHANGELOG.md](https://github.com/vitejs/vite/blob/v8.1.0/packages/vite/CHANGELOG.md) for details. </details>
chore: update npm dependencies
All checks were successful
CI / SBOM (pull_request) Successful in 6m10s
CI / Quality (pull_request) Successful in 11m12s
CI / Build (pull_request) Successful in 5m24s
5b53c957f1
Wuast94 scheduled this pull request to auto merge when all checks succeed 2026-06-24 09:09:07 +02:00
Wuast94 deleted branch updatarr/npm-dependencies-bac734c5b3 2026-06-24 09:50:14 +02:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
Wuast94/go-template!123
No description provided.