github biomejs/biome @biomejs/biome@2.5.15
Biome CLI v2.5.15

2 hours ago

2.5.15

Patch Changes

  • #10634 b436ba0 Thanks @subaru-hello! - Added the new nursery rule noReactObjectTypeAsDefaultProp, which disallows array, object, and function values as default props in React components.

    For example, the following snippet triggers the rule.

    function Component({ items = [] }) {
      return items;
    }
  • #11956 faa8b37 Thanks @dyc3! - Added the nursery rule noSvelteExportLet, which disallows declaring Svelte component props with the legacy export let syntax. Use the $props() rune instead.

    <script>
      export let name;
    </script>
  • #10816 1b9479e Thanks @Th3S4mur41! - Added a new nursery rule useLogicalProperties that enforces the use of logical properties in CSS, promoting better internationalization and accessibility practices. The rule supports a direction option with "ltr" as the default and "rtl" as the alternative.
    This is a first rule covering parts of #9034

    {
      "linter": {
        "rules": {
          "nursery": {
            "useLogicalProperties": {
              "level": "warn",
              "options": {
                "direction": "rtl"
              }
            }
          }
        }
      }
    }
  • #11960 1fdb5c2 Thanks @dyc3! - Added the nursery rule useSvelteKitRuneImports, which reports imports from the deprecated $app/stores module and suggests $app/state instead.

    import { page } from "$app/stores";
  • #11723 3b429d1 Thanks @m1handr! - Fixed #11656: noAstroSetHtmlDirective now correctly reports set:html directives inside Astro template expressions.

  • #12023 874d5ae Thanks @codspeed! - Improved the performance of the HTML formatter up to 4x.

  • #11761 a3462fe Thanks @saberoueslati! - Fixed #11351: useSimplifiedLogicExpression no longer reports boolean literals on the right side of || and && outside boolean contexts, because removing them can change the result of the expression. For example, y = x || false is no longer reported, while if (x || false) still is.

  • #11732 ff4c4dd Thanks @dyc3! - Added the nursery rule noMeaninglessVoidOperator, which reports unnecessary uses of void, such as void log() when log returns void. The rule allows discarded call results, thenables, void 0, and calls returning never.

  • #11975 40dd3fb Thanks @ematipico! - Fixed the indentation of multiline Astro expressions, in templates and attribute values, when running biome check --write. Biome now formats Astro expressions with biome format too, and places them at the column of the surrounding markup.

     <div>
     	{items.map((item) => (
    -	<span>{item}</span>
    -))}
    +		<span>{item}</span>
    +	))}
     </div>
  • #12016 09d4000 Thanks @codspeed! - Improved the performance of indexing and analysis of big files up to 2x. The improvements are mostly visible in projects that make use of project and types lint rules.

  • #11750 089bde0 Thanks @dyc3! - Added the nursery rule useStrictBooleanExpressions, which reports ambiguous truthiness checks such as if (value) when value has type number | undefined. Non-nullable strings and numbers and nullable objects are allowed; the rule has no options.

  • #11494 ad5b362 Thanks @jp-knj! - Added the nursery rule noAstroConflictingSetDirectives, which reports Astro elements with multiple content sources, such as set:html, set:text, and child content.

    For example, <div set:html={html}>content</div> triggers the rule.

  • #11878 84d1b3b Thanks @dyc3! - Fixed #11748: useExhaustiveSwitchCases now reports missing cases for values created with the mapping overload of Array.from, including arrays imported from another module.

  • #11802 7d1f37e Thanks @dyc3! - Tailwind classes will now be detected in Svelte, Vue, and Astro class attribute expressions that don't use a class merging function.

  • #11910 9e50ea2 Thanks @ematipico! - Fixed #11504, a regression where Biome would silently ignore errors in the configuration file. Now errors are correctly retained and checked before executing any command.

  • #11921 d568632 Thanks @hirehamir! - Fixed #10846: when plugins fail to load, Biome now prints each failing plugin's path on its own line, instead of concatenating bare messages like Cannot read file.Cannot read file..

  • #11930 82ea5a6 Thanks @dyc3! - Fixed #11927: The HTML formatter no longer duplicates comments around Svelte blocks. This affected a comment after a block such as {#if} or {#each} at the end of an element, and a comment on the same line as the last element inside a block, before {:else}, {/if}, or a similar tag.

  • #11931 0cc46d8 Thanks @dyc3! - Fixed the indentation of comments at the end of a Svelte block's contents. A comment before {:else}, {:then}, {/if}, or a similar tag is now indented with the block's contents instead of with the tag.

     {#if condition}
     	<span>Text</span>
    -<!-- comment -->
    +	<!-- comment -->
     {/if}
  • #12031 ef0edd4 Thanks @dyc3! - Fixed #12027: Biome's test rules no longer mistake regular method calls named test, it, or describe for tests. For example, useValidTestTitle used to report the following regular expression check as a test with an invalid title:

    const isComment = /^\s*#/.test(line);
  • #11959 8477e61 Thanks @dyc3! - Fixed #11950: noUnusedVariables now reports arrow functions with expression bodies that only reference themselves, such as let h = () => h();.

  • #11915 3260602 Thanks @ematipico! - Fixed #11841, where suppression comments had no effect on some parts of HTML-ish files and on snippets embedded in JavaScript files.

    Now the following suppression works as expected:

    <!-- biome-ignore lint/correctness/noUndeclaredVariables: intentionally external -->
    <div :title="missingValue"></div>
  • #11952 b51040e Thanks @dyc3! - Fixed #11951: the GritQL formatter no longer inserts a space after a within pattern without an until clause.

    -$arg <: within `bar($_)` ,
    +$arg <: within `bar($_)`,
  • #11794 429cf95 Thanks @dyc3! - Added the nursery rule noTailwindRawColors for JavaScript and HTML. It disallows Tailwind palette colors such as bg-pink-500 and text-white, encouraging design system color utilities such as bg-primary.

  • #11837 f5e249b Thanks @dyc3! - Fixed #11836: biome check --write no longer adds invalid parentheses around Svelte {@const} declarations when experimental HTML support and formatting are enabled.

  • #11978 8be0b9e Thanks @dyc3! - Fixed #11817: Biome no longer crashes when its output is piped to a program that exits early, such as head. Output to the closed pipe is now discarded and Biome exits normally.

  • #11868 3841c26 Thanks @ematipico! - Fixed #8986: Biome's language server now scopes all watched-file patterns to each workspace folder, falling back to the deprecated rootUri when no workspace folders are provided. Clients without relative-pattern support receive compatible absolute glob patterns.

  • #11928 0015681 Thanks @dyc3! - Restricted access to the Unix daemon socket to the user running Biome. The socket now lives in a biome-daemon directory inside Biome's cache directory that only this user can access, and the socket itself has mode 0600.

  • #11835 589ca1a Thanks @dyc3! - Updated useReactCompiler: Biome now reports React Compiler diagnostics regardless of the React version declared in package.json.

  • #11907 b7d9037 Thanks @posido! - Fixed withastro/compiler-rs#194: the HTML parser no longer treats a regex literal that starts with > as the end of a self-closing tag. Astro frontmatter such as const escaped = s.replace(/>/g, "&gt;"); no longer swallows the closing --- fence, and the same regex inside a template expression no longer runs past its closing }. A regex literal after a keyword such as return, as in return />'/.test(s), is now recognized too.

  • #12021 59cc595 Thanks @dyc3! - Type inference performance has been significantly improved. Some popular libraries like Zod, Valibot, Arktype, Effect, Kysely, and Drizzle have gained a ~2-240x speedup in our benchmarks. This improvement affects all rules that use type information.

  • #12044 c73fb91 Thanks @dyc3! - Fixed #12042: the HTML formatter no longer removes the space between text and an inline element on the next line when it joins the lines.

    - <p>a <em>b</em> c<u>d</u></p>
    + <p>a <em>b</em> c <u>d</u></p>
  • #11965 f90bf38 Thanks @ematipico! - Fixed module resolution in long-running workspaces so imports reflect package manifest and TypeScript path-mapping changes without requiring the importing file to be edited.

  • #11860 0884e29 Thanks @dyc3! - Removed the attributes and functions options from the nursery rule noTailwindArbitraryValue. The rule now uses the same Tailwind detection as useTailwindShorthandClasses.

  • #11969 865cd30 Thanks @AlbinoGeek! - Fixed #11962: noUnknownTypeSelector no longer reports view transition names inside view transition pseudo-elements, such as page in ::view-transition-group(page).

  • #11914 06ff47b Thanks @dyc3! - Fixed #11897: the safe fix for noUselessStringConcat now escapes embedded double quotes when combining literals, preserving valid JavaScript and existing escape sequences.

  • #11997 af7825f Thanks @github-actions! - The noRestrictedDependencies rule has been updated with new module replacement data, it should now detect for more relevant replacements.

  • #11827 31bb662 Thanks @dfedoryshchev! - Fixed #11566: useNamingConvention no longer reports a namespace declared inside declare global or inside an external module declaration. Both positions are documented as always ignored, and the rule offered a safe fix, so biome check --write renamed the declaration:

    export {}
    declare global {
        // no longer renamed to `Jsx`
        namespace JSX {}
    }
  • #11814 23ba25f Thanks @siketyan! - Fixed type inference through generic type aliases that instantiate another generic type with a nested generic argument, such as type Nested<T> = Box<Wrapper<T>>. Type-aware rules now resolve members of such types:

    declare const nested: Nested<number>;
    // noUnnecessaryConditions now reports that `??` is unnecessary.
    const inner = nested.value.inner ?? 1;
  • #11908 dd5a5ce Thanks @siketyan! - Fixed #11880: Biome no longer misparses a << expression followed by a later >>> as TypeScript type arguments. For example, const mask = 1 << bits followed by const m = mask >>> 0 on the next line now parses correctly.

  • #11882 28c817d Thanks @mikehasa! - Fixed a bug in noOctalEscape where the safe fix could silently change a string's value. A legacy octal escape is at most two digits when the leading digit is 4-7, so "\751" is "\75" + "1" (i.e. "=1") but was rewritten to the single character ǩ; it is now rewritten to "\x3d1".

  • #11861 81b0adb Thanks @Netail! - Added the new nursery rule noSelfImport, which forbids a module from importing itself.

    // foo.js
    import foo from "./foo.js";
  • #12041 5e14509 Thanks @ematipico! - Fixed a stack overflow in type-aware lint rules, such as noMisusedPromises and noFloatingPromises, when generic types in files that import each other reference one another in their type parameters.

    // entity.ts
    import type { Repository } from "./repository";
    export interface Entity<R extends Repository<any> = Repository<any>> {}
    
    // repository.ts
    import type { Entity } from "./entity";
    export interface Repository<E extends Entity<any> = Entity<any>> {}
  • #11838 9bbff0c Thanks @dyc3! - Added the nursery rule usePromiseRejectErrors, which requires Error objects as Promise rejection reasons.

    Promise.reject("Request failed");
    new Promise((resolve, reject) => reject(42));
  • #11917 717db8c Thanks @dyc3! - Added the nursery rule noMisplacedListElements for HTML and JSX, which requires <li> elements with an HTML element parent to be children of <ul>, <ol>, or <menu>. For example, <div><li>Item</li></div> is invalid.

  • #11919 8d0b990 Thanks @dyc3! - Fixed #11899: disabling a domain no longer disables rules that also belong to another enabled domain. For example, with "domains": { "react": "all", "next": "none" }, useExhaustiveDependencies and useHookAtTopLevel are now enabled.
    Rules enabled explicitly in the configuration also stay enabled when one of their domains is set to "none".

  • #11814 23ba25f Thanks @siketyan! - Fixed #11810 and #11813: type-aware rules such as noUnnecessaryConditions and noFloatingPromises no longer take several seconds when a member is accessed on a recursive generic type alias, such as react-hook-form's FieldPathValue or zustand's Mutate.

  • #11983 cc39794 Thanks @AlbinoGeek! - Fixed #11939: the fix of useRegexLiterals no longer escapes a slash that is already escaped. new RegExp("\\/") is now fixed to /\// instead of the invalid /\\//.

  • #11869 3a21c80 Thanks @ematipico! - Fixed #9105: vcs.useIgnoreFile now evaluates parent directory patterns when matching child paths, preserving re-included directories such as !/src while ignoring their excluded siblings.

  • #11875 2cdd220 Thanks @dyc3! - Fixed #11867: noUndeclaredVariables incorrectly reported Vue slot props declared with v-slot or its # shorthand, including destructured props.

  • #12021 59cc595 Thanks @dyc3! - Type inference accuracy has been improved significantly. More global types, like Array, Map, Set, etc., are now fully defined. This should decrease false positives on all typed rules, since less types will be unknown.

  • #11929 aef690d Thanks @Th3S4mur41! - Fixed noUnknownProperty to recognize the frame-sizing CSS property.

  • #12022 6233eb2 Thanks @dyc3! - Fixed #12020: the HTML parser now reports an error for a mismatched closing tag like the </span> in <p>two</span></p>. Previously, it accepted </span> as the end of <p> because span contains the letter p, and the formatter deleted everything after it. HTML tag names are matched case-insensitively, so <DIV></div> is no longer reported as mismatched.

    A closing tag with no opening tag at the top level of a file, like the second </p> in <p>a</p></p><p>b</p>, is now also reported as an error, instead of the formatter deleting it and everything after it.

  • #12037 48cdbb8 Thanks @ff1451! - Fixed #11898: noUselessReturn no longer offers a safe fix for a return; that is the body of an unbraced if, else, or label, because removing it produced invalid code. The safe fix now also keeps comments placed before or after the removed return;.

    function foo() {
      // Still reported, but the return is no longer removed
      if (aborted) return;
    }
  • #12030 4ff83dd Thanks @ematipico! - Fixed #9155: Biome no longer reports a parse error for typed slot props in Vue files, such as v-slot="{ value }: { value: ValueType }". Types used in slot props annotations are now correctly detected as used by noUnusedVariables.

  • #11955 088164f Thanks @dyc3! - Fixed #11946: noUnreachable and useGetterReturn now recognize while and do...while loops with truthy literal conditions as infinite unless control flow exits the loop.

  • #11958 6964bfc Thanks @erenbati! - Fixed #11924: noFocusedTests no longer reports chained method calls such as builder.image(url).fit("max") as focused tests.

  • #11908 dd5a5ce Thanks @siketyan! - Fixed parsing of left shifts between TypeScript instantiation expressions. Biome now parses f<T> << f<T> as a left shift of two instantiation expressions, matching TypeScript, instead of reporting a parse error.

  • #11877 5a53b2c Thanks @dyc3! - Fixed #11278: noUnnecessaryConditions no longer incorrectly reports optional chaining on RegExp.exec() results, including patterns created with new RegExp(). Biome now infers the nullable RegExpExecArray | null return type, preserving necessary checks such as new RegExp(pattern).exec(input)?.[1].

  • #11906 b87822d Thanks @dyc3! - Fixed #11900: useForOf no longer reports loops that update their index inside the body, including i += 1 and argv[++i].

  • #11834 f89dd4f Thanks @dyc3! - Fixed incorrect type inference when generic parameters are reused across inherited types or swapped in recursive types.

What's Changed

  • refactor(js_runtime): reduce code and binary size by @siketyan in #11721
  • feat(codegen): lower generic type constraints by @dyc3 in #11795
  • feat(codegen): lower Symbol static members by @dyc3 in #11796
  • feat(codegen): lower Symbol call signatures by @dyc3 in #11797
  • refactor(codegen): deduplicate local types by @dyc3 in #11798
  • fix(type_inference): skip non-generic references in substitutions by @siketyan in #11814
  • docs: replace retired VS Marketplace badges by @siketyan in #11816
  • perf(analyze): optimize useIndexOf callback traversal by @dyc3 in #11806
  • perf(noBeforeInteractiveScriptOutsideDocument): avoid hitting the filesystem, before easier checks by @dyc3 in #11805
  • fix(useNamingConvention): ignore namespaces inside declare global and external modules by @dfedoryshchev in #11827
  • fix(tailwind): detect tailwind classes in class expressions by @dyc3 in #11802
  • fix(useSimplifiedLogicExpression): don't simplify right-side boolean literals by @saberoueslati in #11761
  • fix(useReactCompiler): remove React 19 version requirement by @dyc3 in #11835
  • fix(svelte): preserve const tag assignment syntax by @dyc3 in #11837
  • feat(md): suppressions support by @ematipico in #11840
  • feat(linter): add noReactObjectTypeAsDefaultProp rule by @subaru-hello in #10634
  • chore(skill): tests and codegen by @ematipico in #11848
  • chore(tooling): publish crates by @ematipico in #11850
  • release: crates v0.7.0 by @github-actions[bot] in #11853
  • chore(renovate): stop updating tailwindcss in the preset generator by @johncarmack1984 in #11852
  • ci: fail when the Tailwind preset can't be generated or is out of date by @johncarmack1984 in #11851
  • feat(codegen): lower array type syntax by @dyc3 in #11799
  • feat(codegen): lower method generic parameters by @dyc3 in #11843
  • fix(noAstroSetHtmlDirective): report directive inside Astro template expressions by @m1handr in #11723
  • chore(useSortedClasses): update the Tailwind v4 preset to tailwindcss 4.3.3 by @johncarmack1984 in #11856
  • fix(rules_check): support HTML-like documentation snippets for JavaScript rules (#11755) by @m1handr in #11762
  • fix(noTailwindArbitraryValue): use shared syntax query by @dyc3 in #11860
  • feat: noSelfImport by @Netail in #11861
  • feat(lint/js): add usePromiseRejectErrors by @dyc3 in #11838
  • feat(lint): add noTailwindRawColors lint rule by @dyc3 in #11794
  • feat(yaml/fmt): suppression comments by @ematipico in #11842
  • fix(vcs): checks for parent ignore files by @ematipico in #11869
  • fix(lsp): relative glob patterns by @ematipico in #11868
  • chore(deps): update dependency @changesets/cli to v3.0.3 by @renovate[bot] in #11864
  • fix(lint): recognize Vue slot bindings by @dyc3 in #11875
  • chore(deps): update dependency tombi to v1.5.5 by @renovate[bot] in #11866
  • chore(deps): update dependency @types/node to v24.13.5 by @renovate[bot] in #11865
  • feat(type_info): lower the Math global class by @dyc3 in #11857
  • feat(codegen): extend lowering to function types and overloaded call signatures by @dyc3 in #11844
  • feat(codegen): lower generic construct signatures by @dyc3 in #11855
  • feat(types): lower readonly types and infer const generics by @dyc3 in #11859
  • feat(codegen): lower builtin constructors and Iterable by @dyc3 in #11870
  • feat(codegen): resolve predefined types with generic arguments by @dyc3 in #11871
  • fix(types): lower RegExp declarations and preserve nullable exec results by @dyc3 in #11877
  • fix(codegen): lower Array.from declarations by @dyc3 in #11878
  • fix(lint/noOctalEscape): preserve string value when fixing octal escapes with leading digit 4-7 by @mikehasa in #11882
  • test(codegen): clean up useless tests by @dyc3 in #11885
  • feat(codegen): lower keyof type operators by @dyc3 in #11886
  • feat(codegen): lower indexed access types by @dyc3 in #11889
  • fix(parse/js): don't misparse << as type arguments when the closing > is missing by @siketyan in #11908
  • ci: silent verification job by @ematipico in #11911
  • feat(lint): add useLogicalProperties rule by @Th3S4mur41 in #10816
  • fix(html/parser): lex a regex that starts with > as a regex by @posido in #11907
  • fix(lint/useForOf): ignore loops updating index in body by @dyc3 in #11906
  • feat(types): lower computed members and infer symbol-keyed access by @dyc3 in #11890
  • feat(type-inference): lower Intl namespace declarations by @dyc3 in #11891
  • feat(type-inference): fully lower Date constructor members by @dyc3 in #11892
  • feat(codegen): lower global functions from source declarations by @dyc3 in #11894
  • fix(cli): emit error if configuration has errors by @ematipico in #11910
  • fix(lint/useAtIndex): preserve negative index expressions by @dyc3 in #11905
  • fix(noUselessStringConcat): escape quotes in string concat fixes by @dyc3 in #11914
  • feat(lint/js): add noMeaninglessVoidOperator by @dyc3 in #11732
  • fix(analyze): first class citizen snippets by @ematipico in #11915
  • fix(service): show paths in plugin loading errors by @hirehamir in #11921
  • test(cli): print commands run by @ematipico in #11923
  • ci: disallow pull request subjects ending with three periods by @dyc3 in #11926
  • fix(biome_css_analyzer): support the frame-sizing CSS property by @Th3S4mur41 in #11929
  • fix: preserve rules enabled by overlapping domains by @dyc3 in #11919
  • fix(format/html): duplicate comments after svelte blocks by @dyc3 in #11930
  • fix(html/fmt): indent comments before svelte block closing tags by @dyc3 in #11931
  • fix(grit): omit trailing space when within has no until clause by @dyc3 in #11952
  • chore: fix git attributes metadata for generated files by @dyc3 in #11954
  • fix(noUnusedVariables): report unused recursive arrow functions by @dyc3 in #11959
  • fix(noFocusedTests): ignore chained .fit() method calls by @erenbati in #11958
  • fix(control_flow): recognize truthy literal conditions as infinite loops by @dyc3 in #11955
  • test(module_graph): add complex type inference benchmarks by @dyc3 in #11845
  • chore: update sponsors by @ematipico in #11973
  • refactor(resolver): use salsa by @ematipico in #11965
  • chore: fix CI by @dyc3 in #11976
  • chore(deps): update dependency @types/node to v24.13.6 by @renovate[bot] in #11982
  • chore(deps): update rust crate bpaf to 0.9.28 by @renovate[bot] in #11985
  • chore(deps): update github-actions by @renovate[bot] in #11984
  • chore(deps): update rust crate camino to 1.2.6 by @renovate[bot] in #11986
  • fix(noUnknownTypeSelector): ignore view transition names in pseudo-elements by @AlbinoGeek in #11969
  • chore(deps): update rust crate cfg-if to 1.0.5 by @renovate[bot] in #11987
  • fix(useRegexLiterals): do not escape an already escaped slash by @AlbinoGeek in #11983
  • fix(deps): update @biomejs packages by @renovate[bot] in #11989
  • chore(deps): update pnpm to v12.6.0 by @renovate[bot] in #11990
  • fix(scss): support unary expressions in query values by @denbezrukov in #11974
  • chore(deps): update rust crate uuid to 1.26.1 by @renovate[bot] in #11993
  • fix(cli): restrict Unix daemon socket permissions by @dyc3 in #11928
  • fix(core): astro fmt embedding by @ematipico in #11975
  • chore(deps): update rust crate smallvec to 1.16.2 by @renovate[bot] in #11992
  • feat(lint/js/svelte): add noSvelteExportLet by @dyc3 in #11956
  • feat(lint/js/svelte): add useSvelteKitRuneImports lint rule by @dyc3 in #11960
  • chore: update e18e module replacements data to 3.4.0 by @github-actions[bot] in #11997
  • fix(cli): don't crash when output is piped to a closed pipe by @dyc3 in #11978
  • refactor(codegen): remove all hard coded references in type lowering by @dyc3 in #11918
  • feat(lint/js): add useStrictBooleanExpressions by @dyc3 in #11750
  • chore: fix broken CI by @dyc3 in #12002
  • feat(scss): interpolation in container by @ematipico in #11999
  • feat(scss): interpolation in layer by @ematipico in #12000
  • feat(scss): interpolation in property names by @ematipico in #12003
  • feat(scss): allow nested declarations by @ematipico in #12005
  • feat(scss): interpolation in attr function by @ematipico in #12007
  • test(type_inference): more complex benchmarks by @dyc3 in #12006
  • fix: unapproved merge by @Netail in #11998
  • fix(type_inference): preserve generic bindings during member lookup by @dyc3 in #11834
  • perf(type inference): replace promise classification HashSet with Brent cycle detection by @codspeed[bot] in #12011
  • perf(type_inference): index namespace members once per module by @dyc3 in #12008
  • perf: read semantic binding ranges without resolving syntax nodes by @dyc3 in #12009
  • feat(scss): parse if inside url function by @ematipico in #12012
  • feat(lint): add noMisplacedListElements by @dyc3 in #11917
  • perf(type_inference): memoize callable signature resolution by @dyc3 in #12017
  • perf(semantic): replace scope interval tree with pre-order index by @codspeed[bot] in #12016
  • chore: type inference changesets by @dyc3 in #12021
  • chore: update codspeed logo in readme by @adriencaccia in #12019
  • ci(bench): plugins js and grit by @ematipico in #12018
  • perf: optimize HTML child whitespace scanning by @codspeed[bot] in #12023
  • perf(type_inference): memoize generic substitution by @dyc3 in #12029
  • fix(parse/html): compare complete opening and closing tag names by @dyc3 in #12022
  • test(lint/html/vue): wrap Vue fixtures in by @dyc3 in #12024
  • fix(vue): slots are now parsed with a new root by @ematipico in #12030
  • perf(yaml): cut allocations and per-character decoding in lexer by @codspeed[bot] in #12032
  • feat: adds noAstroConflictingSetDirectives rule for .astro by @jp-knj in #11494
  • fix(lint): only match test callees rooted in an identifier by @dyc3 in #12031
  • fix(lint): skip noUselessReturn fix for unbraced bodies and keep comments by @ff1451 in #12037
  • fix(inference): keep context and avoid overflow by @ematipico in #12041
  • fix(format/html): keep space when joining text and an inline element on the next line by @dyc3 in #12044
  • docs: fix invalid markup in noMisplacedListElements, add lint for the mistake by @dyc3 in #12045
  • ci: release by @github-actions[bot] in #11815

    New Contributors

    Full Changelog: https://github.com/biomejs/biome/compare/@biomejs/biome@2.5.14...@biomejs/biome@2.5.15

Don't miss a new biome release

NewReleases is sending notifications on new releases.