Releases: biomejs/biome
Release list
Biome CLI v2.5.10
2.5.10
Patch Changes
-
#11403
8f7786fThanks @Princesseuh! - Fixed Astro rejecting JavaScript comments between attributes.<div /* block comment */ class="something"></div> <Component /* c */ client:load />
-
#11403
8f7786fThanks @Princesseuh! - Fixed a bare<in Astro text being treated as the start of a tag, such as<p>5 < 6 and 7 > 6</p>. As in HTML, a<that cannot open a tag is text and needs no escaping. -
#11438
3133ffaThanks @Princesseuh! - Fixed #8294: an Astro expression holding only a comment is no longer reported as a parse error, which also stopped the whole file from being formatted.<div>{/* a note */}</div> <div class={/* a note */}>x</div>
-
#11403
8f7786fThanks @Princesseuh! - Fixed #9165: an empty Astro expression such as<div>{}</div>no longer fails to parse. Astro renders{}as nothing. -
#11403
8f7786fThanks @Princesseuh! - Fixed Astro expressions containing a comment failing to parse.<div>{/* block comment */ x}</div> <div>{/* only a comment */}</div>
-
#11403
8f7786fThanks @Princesseuh! - Added support for Astro's fragment shorthand.<> <p>a</p> </>
-
#11403
8f7786fThanks @Princesseuh! - Fixed an Astro frontmatter block being cut short by a closing tag inside a string or comment.--- const a = "</script>"; // </script> in a comment ---
-
#11403
8f7786fThanks @Princesseuh! - Fixed---being read as an Astro frontmatter fence when markup precedes it. Astro only recognizes frontmatter at the very start of a file, so a file opening with a comment now has no frontmatter, and its---lines are content.<!-- c --> --- this is text, not frontmatter --- -
#11403
8f7786fThanks @Princesseuh! - Fixed an Astro frontmatter block ending early on a line that merely starts with a dash.--- --count; ---
-
#11403
8f7786fThanks @Princesseuh! - Fixed the children of an Astro element carryingis:rawbeing parsed as markup instead of raw text. This now also covers<script>and<style>, whose contents Astro emits verbatim rather than processing, so they are no longer linted as JavaScript or CSS.<article is:raw><% awesome %></article> <script is:raw>{{ mustache }}</script>
-
#11403
8f7786fThanks @Princesseuh! - Fixed Astro rejecting attribute names that start with a colon, such as:href. -
#11403
8f7786fThanks @Princesseuh! - Fixed the Astro parser failing to recover from a malformed closing tag such as<div></{<//, so that a later mistake is reported where it happens rather than cascading. -
#11403
8f7786fThanks @Princesseuh! - Fixed{inside an Astro<math>element opening an expression. MathML is foreign content where Astro parses no expressions, so LaTeX such asR^{2x}now survives as text.<svg>is unaffected. -
#11403
8f7786fThanks @Princesseuh! - Fixed{{at the start of an Astro expression being read as an interpolation. Astro has no{{ }}syntax, so{{ a: 1 }}and<Comp a={{ b: 1 }} />are object literals. -
#11403
8f7786fThanks @Princesseuh! - Fixed expressions inside an Astro<pre>or<textarea>being read as raw text. Astro parses both as ordinary elements, so their markup and interpolations are now parsed, and a variable used only inside one is no longer reported as unused.<pre>{value}</pre> <textarea><div>{value}</div></textarea>
-
#11403
8f7786fThanks @Princesseuh! - Added support for template literal attribute values in Astro, such as<div class=`a ${b} c`>. -
#11403
8f7786fThanks @Princesseuh! - Fixed Astro rejecting HTML5 unquoted attribute values that contain`,=,'or", such as<a href=a=b>and<a href=a'b>. -
#11393
dec5a8fThanks @1678092075! - Fixed #11207:useStrictModeno longer reports Vue event handlers such as@click="count++". -
#11431
c065f99Thanks @levrik! - Fixed #11429: Variables and imports used by Vue same-name bindings such as:disabledorv-bind:disabledare no longer reported as unused. -
#11409
405dedbThanks @ematipico! - Fixed a memory leak in the LSP server where memory usage kept growing over long editor sessions. -
#11422
a51eff7Thanks @dyc3! - Fixed #11416: Biome no longer crashes when parsing incomplete{let}or{const}declarations in Svelte files. -
#11378
34b715cThanks @Netail! - Added extra rule sources from@eslint/css.biome migrate eslintdetects rules in your eslint configurations more reliably. -
#11403
8f7786fThanks @Princesseuh! - Fixed{#,{/,{:and{@being read as Svelte block openings in every HTML-like file. They are now Svelte-only, so in HTML, Vue and Angular files a sequence such as{#if x}is ordinary text instead of a parse error. -
#11443
8d45229Thanks @ematipico! - Fixed #11390:noFloatingPromisesno longer performs unnecessary type inference on call arguments when checking methods of non-generic class instances created withnew. -
#11425
9c2667bThanks @dyc3! - Fixed #6426: GritQL plugins now match and rewrite metavariables embedded in quoted strings. -
#11441
00317c3Thanks @dyc3! - Improved performance of [`useN...
Biome CLI v2.5.9
2.5.9
Patch Changes
-
#11321
41386f3Thanks @dyc3! - Fixed #11315: The CSS parser now recovers at declaration boundaries after bogus declarations, allowing subsequent valid declarations to be parsed. -
#11248
57b197eThanks @yanthomasdev! - Expanded the environment variable metadata used bybiome rageto includeBIOME_BINARY,BIOME_LOG_FILE, andRUST_BACKTRACEas well as reworded explanations for better readability. -
#11377
a8798eaThanks @Netail! - Added a new nursery ruleuseNamedLayerwhich disallows anonymous cascade layers.@layer { a { color: red; } }
-
#11327
6771cf5Thanks @dyc3! - The HTML formatter now preserves meaningful blank lines in HTML, including spacing after elements with trailing spaces and blank lines between comment groups.<div> <!-- first group --> + <!-- second group --> </div> -
#10312
ba8aa18Thanks @dyc3! - Added the nursery ruleuseTailwindShorthandClasses, which suggests shorter Tailwind utility classes. For example, the rule suggests replacingw-4 h-4withsize-4. -
#11333
715e0cdThanks @kkkhs! - Fixed #11328:lint/nursery/useExpectnow recognizes Vitest Browser Modeexpect.element()calls as assertions. -
#11343
9b98211Thanks @johncarmack1984! - Fixed #11311: the CSS parser now accepts Tailwind container-query variant names in@variant, such as@xland@max-xl. These previously produced a parse error and anoUnknownAtRulesdiagnostic.@variant @xl { div { background: red; } }
-
#11220
3e8c488Thanks @santichausis! - Fixed #9541:noUndeclaredVariables,noUnusedImports, andnoUnusedVariablesnow correctly recognise exported variables and functions declared in one embedded<script>block as usable from a sibling<script>block, in Svelte's<script module>/<script>pair and Vue's non-setup<script>blocks.For example, Biome no longer reports
greetas undeclared in the following Svelte component:<script module> export function greet() { console.log("Hello!"); } </script> <script> greet(); </script>
-
#11300
36430ebThanks @dyc3! - Fixed the HTML formatter's whitespace handling formarquee,noscript,video,audio, andobjectelements.- <marquee behavior="alternate"> This text will bounce </marquee> + <marquee behavior="alternate">This text will bounce</marquee>
-
#11299
6559e6cThanks @jp-knj! - Added the nursery ruleuseAstroClientOnlyDirectiveValue, which reports Astroclient:onlydirectives without an initializer.For example,
<Component client:only />triggers the rule. -
#11365
7529811Thanks @MHJahanbakhsh! - Fixed #11229: TheuseGenericFontNamesrule now treatsmathas a valid generic font family. -
#11346
674f5f4Thanks @Jayllyz! - Fixed #11335:noComponentHookFactoriesnow reports ause-prefixed variable only when a function is assigned to it directly.function factory() { const useColors = true; // no longer reported const useStore = createStore({ count: 0 }); // no longer reported const useData = () => useState(null); // still reported return useColors; }
-
#11334
c87c46aThanks @zkasuran! - Fixed #11317:noSvgWithoutTitleno longer reports ansvgthat uses the boolean shorthandaria-hidden(equivalent toaria-hidden={true}in React). -
#11364
13853b1Thanks @ematipico! - Fixed a bug whereuseJsxKeyInIterableincorrectly flagged Astro files. -
#11321
41386f3Thanks @dyc3! - Fixed #11315: Invalid CSS declarations in HTMLstyleattributes now produce parser diagnostics instead of causing a panic. -
#11325
67c3bf0Thanks @dyc3! - Fixed HTML text wrapping to account for the width of an adjacent closing tag, avoiding lines that exceed the configured width when the final word and tag must move together.<a-long-long-long-element - >foo bar foo bar foo bar foo bar foo bar foo bar foo bar</a-long-long-long-element + >foo bar foo bar foo bar foo bar foo bar foo + bar</a-long-long-long-element >
-
#11367
fe5b5d4Thanks @ematipico! - Fixed TypeScriptcompilerOptions.pathsresolution when mapping targets omit./. Biome now resolves these targets relative to their configured path base. -
#11316
17e48d6Thanks @wanxiankai! - Fixed #11289: the safe fix fornoExtraBooleanCastnow preserves parentheses around nested conditional expressions. -
#11254
d25d113Thanks @dyc3! - Fixed #11242: Biome no longer crashes with an access violation when analysing files on Windows ARM64. -
#11221
85aac73Thanks @freeatnet! - Added the nursery rulenoUnsafeTypeAssertion, which disallows TypeScript type assertions while allowing const assertions.const value = input as SomeType;
-
#11314
7ffb677Thanks @ematipico! - Fixed #11310: Restored the performance ofnoMisusedPromisesandnoFloatingPromiseswhen analyzed expressions share deep imported type paths.
Biome CLI v2.5.8
2.5.8
Patch Changes
-
#10710
0a0fbc1Thanks @dyc3! - Added a new nursery ruleuseReactCompiler, which reports diagnostics from React Compiler lint mode. -
#11251
ea9dd8aThanks @dyc3! - Improved performance ofnoImportCycles. -
#11247
52b44d6Thanks @dyc3! - Added the nursery rulenoSvelteLegacyConst, which disallows legacy Svelte{@const}tags and recommends declaration tags with$derived().Invalid:
{#each boxes as box} {@const area = box.width * box.height} <p>{area}</p> {/each}Valid:
{#each boxes as box} {const area = $derived(box.width * box.height)} <p>{area}</p> {/each} -
#11252
d5f5704Thanks @Turtle-Hwan! - Fixed #11250:useAwaitno longer reports async functions that contain anawait usingdeclaration. -
#11143
6be7be1Thanks @vznh! - Fixed #11017:noUselessUndefinedno longer reportsreturn undefinedwhen the enclosing function has a return type annotation other thanundefinedorvoid. -
#11234
caefe39Thanks @subotac! - Fixed #11228: CSS block comments between a declaration colon and value now preserve their source indentation.:root { --font-stack: -/* comment */ + /* comment */ system-ui; } -
#11285
bca1f73Thanks @denbezrukov! - Fixed #11280: CSS formatting keeps comments inside functional pseudo-classes and pseudo-elements instead of moving them before the function name.-:/* comment */ where(div) {} +:where(/* comment */ div) {}
-
#11080
af16a0bThanks @dyc3! - HTMLstyleattribute values are now parsed as CSS. All Biome CSS lint rules are applied to thestyleattributes. -
#11195
6a85588Thanks @dyc3! - Fixed Svelte files failing to parse when an expression begins with an object literal.Now the following snippet is correctly parsed:
<p>{{ a: true }}</p> <div class={{ active: isActive }}></div>
-
#11173
481d008Thanks @Austin1serb! - Fixed #10242: JavaScript GritQL patterns with multiple metavariables now match snippets consistently in WebAssembly. -
#11187
23c0369Thanks @ematipico! - Added the nursery rulenoInvalidPropertyInitValue, which reports an@propertywhoseinitial-valuedoes not match itssyntaxdescriptor. For example, the following declaration triggers the rule becauseredis not a<length>:@property --size { syntax: "<length>"; inherits: false; initial-value: red; }
-
#11272
73896e6Thanks @ematipico! - Improved the diagnostic emitted bynoRootType. -
#11240
bd0b68dThanks @ematipico! - Fixed #11223: Improved the
performance ofnoMisusedPromises
when analyzing async class methods that call other methods throughthis. -
#11172
4a0bc5cThanks @saberoueslati! - Fixed #10806:noUselessFragmentsno longer causes Biome to panic when its unsafe fix removes a fragment used as a JSX attribute value. -
#11227
4d603b0Thanks @saberoueslati! - Fixed #11178:noUndeclaredVariablesno longer reports Vue's built-in instance properties, such as$slotsand$attrs, in template expressions or$eventin inline event-handler expressions. The instance properties are still reported inside<script setup>, where they are not defined. -
#11187
23c0369Thanks @ematipico! - Fixed CSS parsing of registered custom properties: Biome now correctly validates thesyntaxdescriptor of@propertyrules.
What's Changed
- feat(service): treat html style attributes as CSS by @dyc3 in #11080
- feat: code review skill by @ematipico in #11235
- refactor(inference): prepare legacy type removal by @ematipico in #11010
- fix(lint/noUselessFragments): panic when fixing a fragment used as a JSX attribute value by @saberoueslati in #11172
- ci: update codspeed crates by @ematipico in #11239
- feat(lint/js): add
useReactCompilerby @dyc3 in #10710 - ci: fix windows builds by @dyc3 in #11245
- ci: enable longpaths in main.yml by @dyc3 in #11246
- fix(inference): query local types before global by @ematipico in #11240
- feat(lint/html): add
noSvelteLegacyConstby @dyc3 in #11247 - fix(useAwait): treat await using as an async operation by @Turtle-Hwan in #11252
- feat(css): support SCSS nesting combinator by @denbezrukov in #11243
- feat: markdown linter by @ematipico in #11253
- fix(analyzer): scope Vue template globals correctly by @saberoueslati in #11227
- fix(grit): use byte offsets for WASM snippets by @Austin1serb in #11173
- fix(lint): preserve explicitly typed undefined returns by @vznh in #11143
- refactor(md/parse): two-phase parse by @ematipico in #11256
- perf(noImportCycles): exclude node_modules, add more tests by @dyc3 in #11251
- fix(css_formatter): preserve block comment indentation by @subotac in #11234
- chore: markdown rule generator by @Netail in #11261
- perf(md/parse): restore parser state via checkpoint by @ematipico in #11257
- chore: markdownlint rule source by @Netail in #11265
- fix(parse/html): stop reading
{{as an interpolation in Svelte by @dyc3 in #11195 - fix(yaml/parse): catch more errors by @ematipico in #11259
- fix(tools): rule gen and rename rule by @ematipico in #11269
- fix(tools): path normalisation by @ematipico in #11271
- test(format/html): format embedded content in the formatter tests by @dyc3 in #11209
- feat(useSortedClasses): order variants in sort_v4 by @johncarmack1984 in https://github.com/biomejs...
Biome CLI v2.5.7
2.5.7
Patch Changes
-
#10822
c171b3bThanks @pkallos! - Added the optionignoreIfStatementsto useNullishCoalescing. Biome now flagsifstatements that only assign to a nullish variable (such asif (!a) { a = b }) and can rewrite them to??=. When enabled, Biome ignores thoseifstatements. -
#11136
e63354cThanks @AkashNaickar! - Added a new nursery rulenoExtendNative, which reports extending the prototype of a built-in object. -
#10094
e007143Thanks @THEjacob1000! - Added the nursery rulenoTailwindArbitraryValue. Biome now reports Tailwind CSS arbitrary values such asw-[400px], including in HTML/JSX class attributes, configured utility functions, and tagged templates. -
#11184
135f476Thanks @subotac! - Fixed #11176:noUnknownPseudoClassnow recognizes Vue's:deep()pseudo-class inside.vuestyle blocks. -
#8239
a519f9dThanks @cormacrelf! - Fixed #8233, where Biome CLI in
stdin mode didn't work correctly when handling files in projects with nested
configurations. For example, with the following structure,
--stdin-file-path=subdirectory/...would not use the nested configuration in
subdirectory/biome.json:├── biome.json └── subdirectory ├── biome.json └── lib.jsbiome format --write --stdin-file-path=subdirectory/lib.js < subdirectory/lib.jsNow, the nested configuration is correctly picked up and applied.
In addition, Biome now shows a warning if
--stdin-file-pathis provided but
that path is ignored and therefore not formatted or fixed. -
#11138
8c2c6bdThanks @ematipico! - FixednoUnnecessaryConditions: Biome now chooses the same function overload as TypeScript when an argument is a callback, so conditions that were previously missed are reported.The following code is now invalid, because a parameter typed
() => voidaccepts anasynccallback andscheduletherefore returnsstring:declare function schedule(handler: () => void): string; declare function schedule(handler: () => Promise<void>): string | undefined; schedule(async () => {}) ?? "fallback";
The following code is also now invalid, because
map(() => 42)returns42:type Mapper<T> = () => T; declare function map<T>(mapper: Mapper<T>): T; map(() => 42) || flag;
-
#11138
8c2c6bdThanks @ematipico! - Fixed #11087:noUnnecessaryConditionsno longer reports optional chains and nullish coalescing whose receiver can be nullish.For example, the optional chain and fallback in the following code are no longer reported:
declare const usage: { range: { startDate: string } } | null; const startDate = usage?.range.startDate ?? "N/A";
-
#11118
9c16840Thanks @subotac! - Fixed #11098: The HTML formatter now preserves the configured trailing newline when a file ends with a comment.-<!-- trailing comment --> \ No newline at end of file +<!-- trailing comment -->
-
#11201
0e80610Thanks @Bishwas-py! - Fixed #11182: suppression comments fornoPositiveTabindexnow suppress the rule in HTML files when the attributes of the element span multiple lines. -
#11079
607afd2Thanks @dyc3! - The HTML formatter now lays out thesrcsetattribute of<img>and<source>as the list of candidates it is. Runs of whitespace between candidates collapse, and once the list no longer fits on one line each candidate goes on its own line with the descriptors aligned:- <img srcset="/visual@0.5.png 400w, /visual.png 805w, /visual@2x.png 1610w, /visual@3x.png 2415w" /> + <img + srcset=" + /visual@0.5.png 400w, + /visual.png 805w, + /visual@2x.png 1610w, + /visual@3x.png 2415w + " + />
-
#11156
fed72c7Thanks @saberoueslati! - Fixed #11129:noUnusedVariablesno longer reports Vue bindings as unused when they are assigned through automatically unwrapped template refs. -
#11124
d890b39Thanks @denbezrukov! - Fixed CSS formatting of line comments between a declaration colon and value to preserve their source indentation..test { background: - /////// foo - // bar + /////// foo + // bar radial-gradient(circle, #000, transparent); } -
#11113
3d8ab73Thanks @denbezrukov! - Fixed CSS formatting of long block comments between comma-separated property values:.foo { box-shadow: - 1000px /* long long long long long long long long long long long long comment */ 1000px /* long long long long long long long long long comment */ 2px color(srgb 0.555555555 0.555555555 0.555555555), + 1000px + /* long long long long long long long long long long long long comment */ + 1000px /* long long long long long long long long long comment */ 2px + color(srgb 0.555555555 0.555555555 0.555555555), 1px 1px black; } -
#11127
da5c1a5Thanks @dyc3! - The HTML formatter now picks the quote character for an attribute by counting the quotes in the value rather than looking only for a double quote.'and"count as the characters they stand for, and only the character that ends up as the delimiter stays escaped:- <div title='123 '" 456'></div> + <div title="123 '" 456"></div>
Entities that are not quotes, such as
&or&[#39](https://github.com/biomejs/biome/issues/39);, are left exactly as written. -
#11193
77035bbThanks @dyc3! - Fixed the HTML formatter collapsing the blank line between an element and the text that follows it. A blank line before text is now kept, the way one before another element already was:<div>foo</div> - text -
#11106
ad80f57Thanks @dyc3! - The HTML formatter now writes the HTML5 doctype in lowercase, matching Prettier:- <!DOCTYPE html> + <!doctype html>
This only applies to a plain
.htmlfile whose doctype stands alone. A doctype that names a DTD keeps the case it was written with, since the rest of the declaration is not lowercased either:<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">A
.vue,.svelte, or.astrofile keeps whatever the author wrote. -
#11188
60679dbThanks @dyc3! - Fixed the HTML formatter printing a comment twice when it ended the line of the last element in a document:- text<!-- a --><!-- a --> + text<!-- a --> ```...
Biome CLI v2.5.6
2.5.6
Patch Changes
-
#11035
0e4b03bThanks @ematipico! - Fixed a performance regression innoMisusedPromisesthat caused type inference to run repeatedly while linting a file. -
#11043
22ec076Thanks @denbezrukov! - Fixed CSS formatting for multiline function arguments preceded by comments:.example { value: outer( 1, /* comment */ nested( - first, - second - ) + first, + second + ) ); } -
#11007
c9acb25Thanks @BTF-Kabir-2020! - Fixed #9195:useHookAtTopLevelno longer reports hooks in namedforwardRefcomponents that receive arefparameter. -
#10152
50a9bd8Thanks @Zelys-DFKH! - Fixed #10131: Biome now correctly parses curried arrow functions in ternary consequents when the inner arrow's parameters use a destructuring pattern, e.g.cond ? (x) => ({ a, b }) => body : alt. -
#11105
8ffe2b9Thanks @dadavidtseng! - Fixed #11092: ThenoUselessTernaryquick fix now preserves operator spacing when simplifying or inverting boolean ternary expressions. -
#10533
5809875Thanks @Mokto! - Fixed #10515:biome check --writewas not idempotent on Svelte files — multi-line template literals in<script>blocks and block comments in<style>blocks gained an extra indent level on every run. -
#11040
0abb620Thanks @Mokto! - Fixed an issue where the HTML formatter would duplicate a comment placed directly before a Svelte{@const ...}or{@debug ...}block. The duplication compounded on every subsequent--write, causing the file to grow exponentially. -
#10858
6d18204Thanks @ruidosujeira! - Fixed #10839: Svelte{#each}array destructuring no longer includes spaces inside square brackets, and multiline bind function expressions now indent their getter, setter, and function body correctly. -
#11009
2c36626Thanks @ematipico! - Improved the accuracy of type-aware lint rules by resolving more inferred types. For example,noFloatingPromisesnow detects floating Promises returned by aliased callbacks and arrays of Promises created by async mapping callbacks.The following statements are now reported:
type AsyncCallback = () => Promise<void>; declare const callback: AsyncCallback; callback(); [1, 2, 3].map(async (value) => value);
-
#10973
9cb044cThanks @ematipico! - Fixed false positives innoMisleadingReturnTypewhen generic-constraint, normalization, substitution, or structural return-type comparison cannot complete. The rule now suppresses diagnostics rather than suggesting a return type derived from partial information. For example, this unresolved return type is no longer reported:function unresolvedReturnType(): MissingType { return "value" as const; }
-
#11071
15047a2Thanks @dyc3! - The HTML parser now accepts mixed-casedoctypedeclarations. -
#11030
cc90e65Thanks @marschattha! - Therdjsonreporter now populates the severity field of each diagnostic (ERROR,WARNING, orINFO), so tools consuming Reviewdog Diagnostic Format output no longer need to assume a default severity. -
#11009
2c36626Thanks @ematipico! - Fixed a performance regression in type-aware JavaScript lint rules by inferring only requested types and memoizing export resolution. -
#11056
903b177Thanks @dyc3! - Added support for Svelte declaration tags usingletandconst. Biome can now parse, format, and lint bindings declared in these tags. -
#11045
89c27c6Thanks @ematipico! - Improved the performance of Biome formatter up to ~7% across the board. -
#9806
781d68dThanks @dyc3! - Added the nursery rulenoJsRestrictedProperties, which ports ESLint'sno-restricted-propertiesrule. Biome now flags restricted member access and object destructuring, andbiome migrate eslintpreserves the rule's options.
What's Changed
- refactor(lint): extract return type relation by @ematipico in #10973
- refactor(inference): separate raw type collection by @ematipico in #11003
- fix(linter): recognize forwardRef named components with ref params by @BTF-Kabir-2020 in #11007
- fix(html_formatter): match prettier for svelte each as destructuring … by @ruidosujeira in #10858
- fix(cli): populate severity in rdjson reporter output by @marschattha in #11030
- refactor(inference): add structural type mapping by @ematipico in #11004
- refactor(inference): add canonical inferred globals by @ematipico in #11005
- feat(css): support preserved SCSS custom property by @denbezrukov in #11029
- refactor(inference): port Salsa module inference by @ematipico in #11006
- fix(css_formatter): preserve escaped attribute newlines without breaking parent groups by @denbezrukov in #11027
- feat(useSortedClasses): order same-utility values in sort_v4 by @johncarmack1984 in #11016
- fix(linter): inference regression by @ematipico in #11035
- fix(html): stop duplicating leading comments before Svelte {@const}/{@debug} blocks by @Mokto in #11040
- fix(inference): handle import cycles by @ematipico in #11008
- chore: tidy up skills by @ematipico in #11047
- fix(css_parser): parse SCSS parent selector hyphens by @denbezrukov in #11042
- fix(parser): allow nested destructured arrow functions inside ternary-consequent bodies by @Zelys-DFKH in #10152
- fix(css_formatter): indent commented SCSS function arguments by @denbezrukov in #11043
- ci: add e2e benchmarks for lint rules by @ematipico in #11048
- feat(format/yaml): flow mappings by @dyc3 in #11011
- perf(fmt): inline print_element, fast path for printable ASCII chars by @ematipico in #11045
- feat(lint/js): add
noRestrictedPropertiesby @dyc3 in #9806 - feat(format/yaml): block scalars by @dyc3 in #11019
- refactor(analyzer): cut over inferred type consumers by @ematipico in #11009
- test(format/html...
Biome CLI v2.5.5
2.5.5
Patch Changes
-
#10972
ab8c21bThanks @ematipico! - FixeduseExhaustiveSwitchCasesfor unions of bigint literals. The rule now reports missing bigint cases and compares bigint literals by value, including binary, octal, hexadecimal, and separator-containing spellings. For example, this switch now reports the missing2ncase:declare const value: 1n | 2n; switch (value) { case 1n: break; }
-
#10972
ab8c21bThanks @ematipico! - Fixed false positives innoBaseToStringanduseNullishCoalescingwhen member, stringification, or nullish inference cannot complete. These rules now suppress diagnostics instead of reporting from partial type information. For example, neither expression is reported when a recursive type cannot be fully resolved:type Recursive = Recursive; declare const value: Recursive; String(value); value || "fallback";
-
#10977
0bf7486Thanks @ematipico! - Fixed #10922: the actionuseSortedAttributesno longer triggers for HTML instructions. -
#10957
cf263c4Thanks @dyc3! - FixednoThenPropertyfailing to detectObject.fromEntries,Object.defineProperty, andReflect.definePropertycalls with comments between their tokens. -
#10983
edc0ed7Thanks @ayaangazali! - Fixed #10980:useAriaPropsSupportedByRoleno longer reports false positives when the attribute that determines an element's implicit ARIA role is written as a shorthand attribute, such as<a {href} aria-label="...">in Astro and Svelte files.Shorthand attributes are now taken into account when computing the implicit role, so the anchor above correctly resolves to the
linkrole instead ofgeneric. -
#10889
89526e3Thanks @denbezrukov! - Fixed CSS formatter casing for syntax-owned names while preserving author-defined names, including scoped keyframes and container scroll-state queries.- A:HOVER { COLOR: INITIAL; } + A:hover { color: initial; } - @KEYFRAMES :GLOBAL KeepFrames { FROM { COLOR: RED; } } + @keyframes :GLOBAL KeepFrames { from { color: RED; } } - @CONTAINER scroll-state((SCROLLED: TOP) AND (STUCK)) { A:HOVER { COLOR: RED; } } + @container scroll-state((SCROLLED: TOP) AND (STUCK)) { A:hover { color: RED; } }
-
#10964
794ccd0Thanks @denbezrukov! - Fixed CSS formatting for comments between declaration values and!important.-a { color: /* before */ /* after */ red !important; } +a { color: /* before */ red /* after */ !important; }
-
#10993
b7a9694Thanks @denbezrukov! - Fixed the CSS formatter to preserve comments on the correct side of selector combinators and before declaration blocks.-.before > /* comment */ .after {} +.before /* comment */ > .after {}
It now also keeps selectors with escaped newlines in attribute values inline when they fit.
-div - span[foo="bar\ +div span[foo="bar\ value"] {}
-
#10978
8ebafe1Thanks @ematipico! - Fixed #10870:noUnresolvedImportsno longer reports false positives such asimport type { NextRequest } from "next/server". -
#10901
68c10e6Thanks @Socialpranker! - Fixed #10622: the HTML/Vue parser no longer panics on the argument-lessv-bindshorthand (:="props").This syntax is valid Vue and equivalent to
v-bind="props", so the parser now accepts it (along with the longhandv-bind:="props") instead of crashing while building a diagnostic for a missing argument. -
#10936
7df46f5Thanks @ematipico! - Improved generic tuple inference foruseIncludes. The rule now recognizes specialised tuple element types returned through generic aliases. -
#10941
f787725Thanks @siketyan! - Fixed#10855: Biome now supports parsing and formatting CSS custom media queries declared with@custom-media. -
#10969
72d309bThanks @ematipico! - Fixed an issue where Biome logs became too verbose, dumping information not relevant to user's operations. -
e62f6b6Thanks @ematipico! - Fixed #10963: Biome no longer panics when a type-aware rule such asnoFloatingPromiseschecks a call to a function with multiple call signatures imported from another module. -
#10931
899c60dThanks @ematipico! - Fixedcheck --writecommand. Now the command reports code frame of the formatted code, if the formatter is enabled. -
#10904
ceee4f4Thanks @qzwxsaedc! - Fixed #10892:noUnnecessaryConditionsno longer reports a false positive when checking a member of a discriminated union that is accessed through a default type-only namespace import. The following code is no longer flagged:import type Types from "./types"; declare function parse(): Types.Result<string>; const result = parse(); if (!result.success) { }
-
#10962
f0a67f2Thanks @ematipico! - Biome no longer removes embedded styles and scripts in HTML files. -
#11000
5039a1eThanks @ematipico! - Fixed a bug where closing one editor stopped a shared Biome daemon used by other editors. LSP proxy processes now exit when either the editor or daemon disconnects. -
#10957
cf263c4Thanks @dyc3! - Improved the performance of thenoThenPropertylint rule by about 50%. -
#10992
4bf9b21Thanks @ematipico! - FixednoMisusedPromises: The rule now reports Promise-returning callbacks where a synchronous callback is expected when calls use tuple spreads or tuple rest parameters, including generic and deeply nested tuples, and when constructor signatures come from interface or object types. Recursive or excessively nested tuple spreads use a conservative fallback so analysis terminates.For example, the following callback is no...
Biome CLI v2.5.4
2.5.4
Patch Changes
-
#10665
55ff995Thanks @dyc3! - Improved the performance of the HTML parser slightly in our synthetic benchmarks. -
#10894
f4fb10eThanks @ematipico! - Fixed #6392: On-type formatting no longer moves comments before anifstatement into its body. -
#10939
f2799dbThanks @Netail! - Fixed #10930:noLabelWithoutControlnow correctly detects text interpolation in Astro, Svelte & Vue as valid accessible content. -
#10945
ae15d98Thanks @Netail! - Fixed #10942: Svelte directives don't throw an accidental debug log anymore. -
#10842
5e1abfeThanks @JamBalaya56562! - Fixed #9196:biome check --write --unsafeno longer hangs forever when applying thenoCommentTextcode fix.The rule's fix now wraps the comment in a real JSX expression container (
{/* comment */}) instead of re-inserting the braces as plain JSX text, so the fixed code is no longer reported again by the same rule. -
#10891
ecca79eThanks @ematipico! - Fixed#10885: prevented a module-inference regression introduced by a housekeeping change. -
#10886
60c8043Thanks @dyc3! - Fixed #10727: Biome now breaks the arguments of curriedtest.each,it.each,describe.each, andtest.forcalls when they exceed the configured line width.- test.each([[1, 2]])("a description that is long enough to push the hugged opening line beyond the print width", (a, b) => { - expect(a).toBe(b); - }); + test.each([[1, 2]])( + "a description that is long enough to push the hugged opening line beyond the print width", + (a, b) => { + expect(a).toBe(b); + }, + );
-
#10895
01a85f0Thanks @ematipico! - Biome will now remove stale Unix daemon sockets from older Biome versions when starting a newer daemon.
What's Changed
- feat(yml/fmt): basic block properties by @ematipico in #10873
- feat(useSortedClasses): sort important-suffix classes in sort_v4 by @johncarmack1984 in #10880
- fix(format/js): wrap curried test each calls by @dyc3 in #10886
- fix(markdown): parse whitespace after list markers by @tidefield in #10869
- fix(inference): use correct function when cloning data by @ematipico in #10891
- docs(noDuplicateProperties): note that @Keyframes declarations are ignored by @dfedoryshchev in #10893
- fix(lint): prevent noCommentText fix from looping forever by @JamBalaya56562 in #10842
- fix(core): cleanup old sockets in Unix by @ematipico in #10895
- feat(inference): inference engine via salsa by @ematipico in #10888
- chore(deps): update dependency @types/node to v24.13.3 by @renovate[bot] in #10920
- chore(deps): update github-actions by @renovate[bot] in #10921
- chore(deps): update pnpm to v11.11.0 by @renovate[bot] in #10925
- chore(deps): update rust crate jiff to 0.2.32 by @renovate[bot] in #10923
- chore(deps): update rust crate regex to 1.13.0 by @renovate[bot] in #10926
- fix(fmt): don't move comments inside if statement by @ematipico in #10894
- fix(html_analyze): noLabelWithoutControl interpolation by @Netail in #10939
- refactor(parse/html): keywords for all html/svg tags by @dyc3 in #10665
- perf(lint/html): avoid string comparisons for tag names by @dyc3 in #10692
- fix: accidental debug log by @Netail in #10945
- ci: release by @github-actions[bot] in #10887
Full Changelog: https://github.com/biomejs/biome/compare/@biomejs/biome@2.5.3...@biomejs/biome@2.5.4
Biome CLI v2.5.3
2.5.3
Patch Changes
-
#10815
86613d5Thanks @WaterWhisperer! - Fixed a parser panic reported in #10708: Biome now recovers when unsupported CSS Modules@valuerules or scoped@keyframesnames end at EOF. -
#10534
da9b403Thanks @Mokto! - FixednoUnusedVariablesfalse positives in Svelte files: Svelte store subscriptions ($storereferences in templates now keep the underlyingstorebinding from being flagged), and$bindable()props that are only written to in the script block (write-only is intentional for bindable props) are no longer reported as unused. -
#10827
098ba41Thanks @Aqu1bp! - Fixed #10698: ThenoUnsafeOptionalChainingrule now reports unsafe optional chains wrapped in TypeScriptas,satisfies, type assertion, and instantiation expressions, such asnew (value?.constructor as Constructor)(). -
#10773
3c6513dThanks @otkrickey! - Fixed #10772:useVueValidVOnno longer reports a missing handler for v-on directives using a verb modifier (.stop/.prevent) without an expression, e.g.<div @click.stop></div>. The rule also accepts the arg-less object syntax<div v-on="$listeners"></div>instead of reporting a missing event name. -
#10721
d83c66bThanks @minseong0324! - Improved type-aware lint rule inference for built-in globals and indexed function calls. Biome now resolvesError(...),new Error(...), optionalError#stack, and calls through indexed function values such ashandlers[0]()more accurately. -
#10865
6450276Thanks @ematipico! - Fixed #10845. Biome Language Server no longer goes in deadlock when the scanner is enabled. -
#10853
93d8e53Thanks @Netail! - Fixed #10840: Astro shorthand attribute syntax is now correctly being parsed from embedded nodes. -
#10820
bba3092Thanks @JamBalaya56562! - Fixed #10619:noProcessEnvnow also reports computed (bracket) member access. Previously only dot access was checked, soprocess["env"]andenv["NODE_ENV"](whereenvis imported fromnode:process) were missed. Both static and computed accesses are now reported. -
#10835
3447b2fThanks @dyc3! - Fixed #10824:useDomQuerySelectornow supports anignoreoption for receiver identifiers that should not be reported. -
#10875
b12e486Thanks @dyc3! - Fixed #10795:--profile-rulesnow reports timings for each plugin separately asplugin/<pluginName>, matching the naming used by plugin suppressions, instead of aggregating all plugins under a singleplugin/pluginentry. -
#10877
d6bc447Thanks @ematipico! - Fixed biome-zed#164: Biome no longer inserts stray whitespace when format-on-type runs after closing delimiters such as),], and}. -
#10867
a21463eThanks @dyc3! - Fixed #10864: Biome no longer crashes when checking or linting HTML files with unquoted attribute values such as<textarea rows=4></textarea>.
What's Changed
- fix(useVueValidVOn): allow verb-modifier-only handlers and object syntax by @otkrickey in #10773
- fix(css_parser): recover CSS Modules syntax at EOF by @WaterWhisperer in #10815
- feat(fmt/yaml): sequence mapping by @ematipico in #10814
- fix(lint): handle TypeScript wrappers in unsafe optional chains by @Aqu1bp in #10827
- fix(lint): report computed member access in noProcessEnv by @JamBalaya56562 in #10820
- ci: ignore quick-xml RustSec advisories by @JamBalaya56562 in #10831
- perf(core): embedded ranges plumbing by @ematipico in #10836
- feat(md/fmt): more compatibility gains by @ematipico in #10833
- chore(xtask): migrate Error global type by @minseong0324 in #10721
- fix(lint): suppress false positives in noUnusedVariables for Svelte store subscriptions and $bindable() props by @Mokto in #10534
- refactor(md/parse): reduce emitted nodes by @ematipico in #10847
- feat(md/fmt): quotes, thematic breaks and link definition by @ematipico in #10844
- refactor(md/parse): parse HTML into one single node by @ematipico in #10848
- docs(noMissingVarFunction): list container-name in ignored properties by @dfedoryshchev in #10852
- refactor(md/parse): fold code content lines and indentation runs by @ematipico in #10851
- fix: astro shorthand syntax embedded nodes by @Netail in #10853
- chore(xtask): migrate disposable global types by @minseong0324 in #10841
- test(cli): anchor temp-dir snapshot redaction to path boundaries by @JamBalaya56562 in #10832
- chore(deps): update github-actions by @renovate[bot] in #10856
- chore(deps): update pnpm to v11.9.0 by @renovate[bot] in #10860
- ci: ignore Bot PRs in AgentScan workflow by @siketyan in #10862
- fix(workspace): deadlock on salsa setters by @ematipico in #10865
- ci: update macos runner by @ematipico in #10866
- feat(useDomQuerySelector): add ignore option by @dyc3 in #10835
- fix(css_parser): gate SCSS syntax in CSS by @denbezrukov in #10456
- fix(html): fix inner_string_text for unquoted attribute values by @dyc3 in #10867
- chore(deps): update rust to v1.96.1 by @renovate[bot] in #10859
- ci: update crossbeam-epoch to fix advisory by @ematipico in #10874
- feat(md/fmt): bullet list spacing by @ematipico in #10854
- docs(useSortedClasses): remove outdated notes about unsupported features by @johncarmack1984 in #10872
- feat(plugins): show plugin names in --profile-rules output by @dyc3 in #10875
- chore(markdown): update prettier and test fixtures for markdown by @tidefield in #10882
- fix(lsp): guard format on type using the right characters by @ematipico in #10877
- ci: release by @github-actions[bot] in #10817
New Contributors
- @johncarmack1984 made their first contribution in #10872
Full Changelog: https://github.com/biomejs/biome/compare/@biomejs/biome@2.5.2...@biomejs/biome@2.5.3
Biome CLI v2.5.2
2.5.2
Patch Changes
-
#10595
f458028Thanks @pkallos! - Added the optionignoreBooleanCoercionto useNullishCoalescing. When enabled, Biome ignores||and||=used inside aBoolean()call, where coalescing on falsy values is intentional. -
#10798
4a32b63Thanks @pkallos! - Added the optionignorePrimitivesto useNullishCoalescing. When enabled, Biome ignores||,||=, and ternary expressions whose non-nullish operands are all primitives the option opts out of. Usetrueto ignore all primitives, or an object selectingstring,number,boolean, orbigint. -
#10545
f3d4c00Thanks @Mokto! - Added the new nursery rulenoSvelteUnnecessaryStateWrap, which reports unnecessary$state()wrapping of classes fromsvelte/reactivitythat are already reactive.<script> import { SvelteMap } from "svelte/reactivity"; const map = $state(new SvelteMap()); // redundant </script>
-
#10752
f62fb8bThanks @ematipico! - Fixed #10739. Now the ruleuseValidAutocompletecorrectly flags theautoCompleteattribute. -
#10796
f1b3ab2Thanks @ematipico! - Fixed #10768. Improved the performance of the Biome Language Server by cancelling certain in-flight operations when there are fast updates. -
#10719
aa649b5Thanks @minseong0324! - FixednoMisleadingReturnTypefalse positive on returns that use a widening type assertion:"a" as stringis no longer reported as misleading. The rule now also reports a literal-pinning assertion such asfalse as false, matching the existingas constbehavior.// No longer flagged (returns are `string`): function getValue(b: boolean): string { if (b) return "a" as string; return "b" as string; } // Now also reported, like `as const` (returns `false`): function isReady(): boolean { return false as false; }
-
#10678
8f073a7Thanks @PranavAchar01! - Fixed #7718: Biome now correctly parses CSS nesting selectors when&appears as a trailing sub-selector after a type selector, e.g.h1& { color: red; }. -
#10756
5ec965aThanks @denbezrukov! - Fixed CSS formatter output for selector lists withallowWrongLineCommentsand//comments after a selector comma. Biome now keeps the selector before the line comment inline instead of breaking it across descendant combinators.-.powerPathNavigator - .helm - button.pressedButton, // pressed +.powerPathNavigator .helm button.pressedButton, // pressed .powerPathNavigator .helm button:active:not(.disabledButton) { }
-
#10757
6232fcdThanks @PranavAchar01! - Fixed #8269: the CSS parser now accepts Tailwind@variantand@utilitynames that start with a digit, such as the2xlbreakpoint.@utility container { @variant 2xl { max-width: 1400px; } }
-
#10777
575ced6Thanks @WaterWhisperer! - Fixed an issue reported in #10708: the GitLab reporter now handles--verbosediagnostics filtering correctly. -
#10281
0efe244Thanks @Zelys-DFKH! - Fixed a bug where GritQL patterns rejected positional (unkeyed) arguments. -
#10758
e36fd8aThanks @henrybrewer00-dotcom! - Fixed #10697: The formatter no longer removes the parentheses around anawaitoryieldexpression used as the target of a TypeScript instantiation expression. For example,(await makeFactory)<Value>is no longer reformatted toawait makeFactory<Value>, which would change the meaning of the code. -
#10586
3617094Thanks @IxxyDev! - Fixed #9568:noFloatingPromisesno longer reports a false positive when calling an overloaded function and the selected overload does not return a promise.function bestEffort(cb: () => Promise<number>): Promise<number>; function bestEffort(cb: () => number): number; function bestEffort( cb: () => number | Promise<number>, ): Promise<number> | number { return cb() as Promise<number> | number; } // This resolves to the second overload, which returns `number`, so it is no // longer flagged as a floating promise. bestEffort(() => 42);
-
#10766
7aff4c1Thanks @JamBalaya56562! - Fixed #2862:noInteractiveElementToNoninteractiveRoleno longer reports custom elements (a tag name containing a dash, e.g.<my-button role="img" />). Per the W3C HTML-ARIA specification, a custom element may be given any role or none. -
#10680
771daa4Thanks @WaterWhisperer! - Fixed #10635: Biome now recognizes chained
table tests such astest.concurrent.each()andit.concurrent.each()as test calls, fixing
noMisplacedAssertionfalse positives and improving formatting for those test declarations. -
#10759
34570b5Thanks @henrybrewer00-dotcom! - Fixed #10636: noStaticElementInteractions no longer reports a false positive for event handlers on Svelte special elements such as<svelte:window>,<svelte:document>, and<svelte:body>. These are not real DOM elements, so they are now ignored by the rule. -
#10741
bd2364eThanks @JamBalaya56562! - Fixed #6686: theragecommand now respects the--config-pathoption and theBIOME_CONFIG_PATHenvironment variable when loading the Biome configuration. Previously it always used the default configuration resolution and reported the configuration asNot setwhen nobiome.jsonexisted in the working directory. -
#10763
2c3e82dThanks @Aqu1bp! - Fixed #10742:noSolidDestructuredPropsnow reports destructured props in Solid function components and JSX children. -
#10606
a4cc4abThanks @Mokto! - Fixed false positives innoUnusedImports,noUnusedVariables, anduseImportTypefor Svelte c...
Biome CLI v2.5.1
2.5.1
Patch Changes
-
#10722
f8a303dThanks @denbezrukov! - Fixed CSS formatter output for comments between import media queries.-@import url("print.css") print, -/* comment */ -screen; +@import url("print.css") print, /* comment */ screen;
-
#10738
9fdc560Thanks @JamBalaya56562! - Fixed #9899: thejsonandjson-prettyreporters now escape backslashes in a diagnostic'slocation.path. Previously, paths containing backslashes (such as Windows-style paths) were emitted unescaped, producing invalid JSON.- "path": "src\account\setup-passkey.tsx", + "path": "src\\account\\setup-passkey.tsx",
-
#10626
5f837dfThanks @tom-groves! - Fixed #10625:biome migrateno longer emits an invalid trailing comma when a renamed rule (such asnoConsoleLog→noConsole) is the last member of its rule group. Previously this produced malformed output that aborted the migration of a strict-JSONbiome.jsonwith a parsing error. -
#10535
c245f9dThanks @Mokto! - Fixed a false positive innoUnusedVariablesfor Svelte files where variables referenced inside{@html expr}blocks were incorrectly reported as unused. -
#10668
a0f197eThanks @Netail! - Thebiome initcommand has been updated to include a more up-to-date URL to the first-party extensions page. -
#10667
d8c3e87Thanks @Netail! - Fixed #10664: useErrorCause now correctly detects a shorthand property. -
#10696
ef2373fThanks @ematipico! - Fixed #9566. Improved how the Biome Language Server loads multiple configuration files inside a workspace. -
#10705
4ccb410Thanks @ematipico! - Fixed #10652. Biome plugins are now properly filtered when using--onlyand--skipflags. -
#10669
aa0a6ebThanks @Netail! - Fixed #10651: useInlineScriptId now correctly trims trivia to detect if an id attribute has been set. -
#10689
844b1beThanks @ematipico! - Fixed #10658. The issue was caused by the "Go-to definition" editor feature, which was enabled by default. The feature is now disabled by default. To work, the feature triggers the scanner to build the module graph. This caused memory leak issues in cases where Biome starts in the home directory to modify files.If you relied on this new feature, you must now turn on using the [editor settings] of the extension e.g. Zed and VSCode.
-
#10695
043fbb5Thanks @ematipico! - Fixed #10674. Biome now throws an error when the fieldlevelis missing from a rule option. -
#10712
5941df2Thanks @Conaclos! - Improved the diagnostic and the documentation ofuseFlatMap. -
#10615
23814f1Thanks @qwertycxz! - Improved the DX the JSON schema when it's used by certain code editors like VSCode. -
#10688
ec69489Thanks @ematipico! - Fixed a bug where the Biome Daemon did not correctly shut down when the editor was closed during an in-progress operation, especially while scanning. -
#10701
6c2e0d7Thanks @ematipico! - Fixed #10694. The Biome Language Server no longer prints an error when the user hovers a variable imported from node_modules. -
#10681
888515bThanks @Conaclos! - FixeduseExportTypethat reported useless details in some diagnostics. -
#10220
3694a13Thanks @theBGuy! - FixeduseAnchorContentfalse positive for<a>elements used as render prop values (e.g.render={<a href="..." />}), a pattern where the receiving component renders its children inside the anchor element. -
#10702
98823fbThanks @ematipico! - Fixed #10612. The Biome parser now correctly parses processing instructions. The following SVG doesn't throw errors anymore:<?xml version="1.0" encoding="UTF-8" ?> <svg></svg>
What's Changed
- ci: use tombi from installed from toolchain by @ematipico in #10613
- docs: fix duplicate "being" in symlink test comments by @dfedoryshchev in #10611
- refactor(core): add
biome_languagescrate by @ematipico in #10590 - fix(migrate): avoid trailing comma when a renamed rule is last in its group by @tom-groves in #10626
- chore(deps): update rust:1.96.0-bullseye docker digest to e12c121 by @renovate[bot] in #10641
- chore(deps): update dependency @types/node to v24.13.2 by @renovate[bot] in #10642
- chore(deps): update github-actions by @renovate[bot] in #10643
- chore(deps): update rust crate regex to 1.12.4 by @renovate[bot] in #10644
- fix(deps): update dependency prettier to v3.8.4 by @renovate[bot] in #10646
- chore(deps): update pnpm to v11.6.0 by @renovate[bot] in #10647
- chore(deps): update rust crate insta to 1.48.0 by @renovate[bot] in #10648
- chore(deps): update rust crate smallvec to 1.15.2 by @renovate[bot] in #10645
- fix(js_analyze): useErrorCause shorthand property by @Netail in #10667
- fix(js_analyze): trim useInlineScriptId trivia by @Netail in #10669
- chore: dead and old links by @Netail in #10668
- docs(useValidAnchor): enhance lint rule explainer by @Th3S4mur41 in #10679
- chore(biome_configuration): add allowTrailingCommas to json-schema to make VSCode happy by @qwertycxz in #10615
- chore: fixes an internal CVE by @ematipico in #10690
- chore(deps): update dependency vite to v7.3.5 [security] by @renovate[bot] in #10691
- fix(lsp): shutdown the daemon on disconnect by @ematipico in #10688
- fix(lsp): disable go-to definition by default by @ematipico in https://github.com/biomejs/biome/pu...