Skip to content

Conversation

@renovate
Copy link
Contributor

@renovaterenovatebot commented Oct 2, 2025

Note

Mend has cancelled the proposed renaming of the Renovate GitHub app being renamed to mend[bot].

This notice will be removed on 2025-10-07.


This PR contains the following updates:

PackageChangeAgeConfidence
@biomejs/biome (source)2.2.4 -> 2.2.5ageconfidence
@biomejs/biome (source)2.2.4 -> 2.2.5ageconfidence

Release Notes

biomejs/biome (@​biomejs/biome)

v2.2.5

Compare Source

Patch Changes
  • #​75975c3d542 Thanks @​arendjr! - Fixed #​6432: useImportExtensions now works correctly with aliased paths.

  • #​7269f18dac1 Thanks @​CDGardner! - Fixed #​6648, where Biome's noUselessFragments contained inconsistencies with ESLint for fragments only containing text.

    Previously, Biome would report that fragments with only text were unnecessary under the noUselessFragments rule. Further analysis of ESLint's behavior towards these cases revealed that text-only fragments (<>A</a>, <React.Fragment>B</React.Fragment>, <RenamedFragment>B</RenamedFragment>) would not have noUselessFragments emitted for them.

    On the Biome side, instances such as these would emit noUselessFragments, and applying the suggested fix would turn the text content into a proper JS string.

    // Ended up as: - const t = "Text"constt=<>Text</>// Ended up as: - const e = t ? "Option A" : "Option B"conste=t ? <>Option A</> : <>Option B</>/* Ended up as: function someFunc(){ return "Content desired to be a multi-line block of text." }*/functionsomeFunc(){return<> Content desired to be a multi-line block of text. <>}

    The proposed update was to align Biome's reaction to this rule with ESLint's; the aforementioned examples will now be supported from Biome's perspective, thus valid use of fragments.

    // These instances are now valid and won't be called out by noUselessFragments.constt=<>Text</>conste=t ? <>Option A</> : <>Option B</>functionsomeFunc(){return<> Content desired to be a multi-line block of text. <>}
  • #​7498002cded Thanks @​siketyan! - Fixed #​6893: The useExhaustiveDependencies rule now correctly adds a dependency that is captured in a shorthand object member. For example:

    useEffect(()=>{console.log({ firstId, secondId });},[]);

    is now correctly fixed to:

    useEffect(()=>{console.log({ firstId, secondId });},[firstId,secondId]);
  • #​75091b61631 Thanks @​siketyan! - Added a new lint rule noReactForwardRef, which detects usages of forwardRef that is no longer needed and deprecated in React 19.

    For example:

    exportconstComponent=forwardRef(functionComponent(props,ref){return<divref={ref}/>;});

    will be fixed to:

    exportconstComponent=functionComponent({ ref, ...props}){return<divref={ref}/>;};

    Note that the rule provides an unsafe fix, which may break the code. Don't forget to review the code after applying the fix.

  • #​75203f06e19 Thanks @​arendjr! - Added new nursery rule noDeprecatedImports to flag imports of deprecated symbols.

Invalid example
// foo.jsimport{oldUtility}from"./utils.js";
// utils.js/** * @&#8203;deprecated */exportfunctionoldUtility(){}
Valid examples
// foo.jsimport{newUtility,oldUtility}from"./utils.js";
// utils.jsexportfunctionnewUtility(){}// @&#8203;deprecated (this is not a JSDoc comment)exportfunctionoldUtility(){}
  • #​74579637f93 Thanks @​kedevked! - Added style and requireForObjectLiteral options to the lint rule useConsistentArrowReturn.

    This rule enforces a consistent return style for arrow functions. It can be configured with the following options:

    • style: (default: asNeeded)
      • always: enforces that arrow functions always have a block body.
      • never: enforces that arrow functions never have a block body, when possible.
      • asNeeded: enforces that arrow functions have a block body only when necessary (e.g. for object literals).
style: "always"

Invalid:

constf=()=>1;

Valid:

constf=()=>{return1;};
style: "never"

Invalid:

constf=()=>{return1;};

Valid:

constf=()=>1;
style: "asNeeded"

Invalid:

constf=()=>{return1;};

Valid:

constf=()=>1;
style: "asNeeded" and requireForObjectLiteral: true

Valid:

constf=()=>{return{a: 1};};
  • #​7510527cec2 Thanks @​rriski! - Implements #​7339. GritQL patterns can now use native Biome AST nodes using their PascalCase names, in addition to the existing TreeSitter-compatible snake_case names.

    engine biome(1.0) language js(typescript,jsx) or{// TreeSitter-compatible pattern if_statement(), // Native Biome AST node pattern JsIfStatement() } as $stmt where{register_diagnostic( span=$stmt, message="Found an if statement" ) } 
  • #​757447907e7 Thanks @​kedevked! - Fixed 7574. The diagnostic message for the rule useSolidForComponent now correctly emphasizes <For /> and provides a working hyperlink to the Solid documentation.

  • #​7497bd70f40 Thanks @​siketyan! - Fixed #​7320: The useConsistentCurlyBraces rule now correctly detects a string literal including " inside a JSX attribute value.

  • #​75221af9931 Thanks @​Netail! - Added extra references to external rules to improve migration for the following rules: noUselessFragments & noNestedComponentDefinitions

  • #​75975c3d542 Thanks @​arendjr! - Fixed an issue where package.json manifests would not be correctly discovered
    when evaluating files in the same directory.

  • #​756538d2098 Thanks @​siketyan! - The resolver can now correctly resolve .ts, .tsx, .d.ts, .js files by .js extension if exists, based on the file extension substitution in TypeScript.

    For example, the linter can now detect the floating promise in the following situation, if you have enabled the noFloatingPromises rule.

    foo.ts

    exportasyncfunctiondoSomething(): Promise<void>{}

    bar.ts

    import{doSomething}from"./foo.js";// doesn't exist actually, but it is resolved to `foo.ts`doSomething();// floating promise!
  • #​7542cadad2c Thanks @​mdevils! - Added the rule noVueDuplicateKeys, which prevents duplicate keys in Vue component definitions.

    This rule prevents the use of duplicate keys across different Vue component options such as props, data, computed, methods, and setup. Even if keys don't conflict in the script tag, they may cause issues in the template since Vue allows direct access to these keys.

    Invalid examples
    <script>exportdefault{ props: ["foo"],data(){return{ foo:"bar", }; },};</script>
    <script>exportdefault{data(){return{ message:"hello", }; }, methods:{message(){console.log("duplicate key"); }, },};</script>
    <script>exportdefault{ computed:{count(){returnthis.value*2; }, }, methods:{count(){this.value++; }, },};</script>
    Valid examples
    <script>exportdefault{ props: ["foo"],data(){return{ bar:"baz", }; }, methods:{handleClick(){console.log("unique key"); }, },};</script>
    <script>exportdefault{ computed:{displayMessage(){returnthis.message.toUpperCase(); }, }, methods:{clearMessage(){this.message=""; }, },};</script>
  • #​7546a683acc Thanks @​siketyan! - Internal data for Unicode strings have been updated to Unicode 17.0.

  • #​7497bd70f40 Thanks @​siketyan! - Fixed #​7256: The useConsistentCurlyBraces rule now correctly ignores a string literal with braces that contains only whitespaces. Previously, literals that contains single whitespace were only allowed.

  • #​756538d2098 Thanks @​siketyan! - The useImportExtensions rule now correctly detects imports with an invalid extension. For example, importing .ts file with .js extension is flagged by default. If you are using TypeScript with neither the allowImportingTsExtensions option nor the rewriteRelativeImportExtensions option, it's recommended to turn on the forceJsExtensions option of the rule.

  • #​75818653921 Thanks @​lucasweng! - Fixed #​7470: solved a false positive for noDuplicateProperties. Previously, declarations in @container and @starting-style at-rules were incorrectly flagged as duplicates of identical declarations at the root selector.

    For example, the linter no longer flags the display declaration in @container or the opacity declaration in @starting-style.

    a{display: block; @&#8203;container (min-width: 600px){display: none} } [popover]:popover-open{opacity:1; @&#8203;starting-style{opacity:0} }
  • #​7529fea905f Thanks @​qraqras! - Fixed #​7517: the useOptionalChain rule no longer suggests changes for typeof checks on global objects.

    // oktypeofwindow!=="undefined"&&window.location;
  • #​7476c015765 Thanks @​ematipico! - Fixed a bug where the suppression action for noPositiveTabindex didn't place the suppression comment in the correct position.

  • #​7511a0039fd Thanks @​arendjr! - Added nursery rule noUnusedExpressions to flag expressions used as a statement that is neither an assignment nor a function call.

Invalid examples
f;// intended to call `f()` instead
functionfoo(){0;// intended to `return 0` instead}
Valid examples
f();
functionfoo(){return0;}

Configuration

📅 Schedule: Branch creation - Between 12:00 AM and 03:59 AM, only on Monday ( * 0-3 * * 1 ) (UTC), Automerge - At any time (no schedule defined).

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about these updates again.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

@renovaterenovatebot requested a review from afonsojramos as a code ownerOctober 2, 2025 14:05
@renovaterenovatebot added the dependency Dependency updates label Oct 2, 2025
@renovaterenovatebot added the dependency Dependency updates label Oct 2, 2025
@renovaterenovatebotforce-pushed the renovate/biomejs-biome-2.x branch from 708899f to e0a26fbCompareOctober 2, 2025 14:09
@setchysetchy merged commit 4895f86 into mainOct 2, 2025
11 of 12 checks passed
@setchysetchy deleted the renovate/biomejs-biome-2.x branch October 2, 2025 14:11
@github-actionsgithub-actionsbot added this to the Release 6.9.0 milestone Oct 2, 2025
@sonarqubecloud
Copy link

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencyDependency updates

Development

Successfully merging this pull request may close these issues.

2 participants

@setchy