All versions since 2.5.12
2.5.12
Patch Changes
-
#11440
b88f1eaThanks @Princesseuh! - Fixed Astro attribute expressions rejecting TypeScript and JSX syntax that is accepted in text expressions.<Component icon={<Icon />} count={total as number} onSelect={(e: Event) => e} /> -
#11440
b88f1eaThanks @Princesseuh! - Fixed Astro attribute names being split on:and.inside an expression, such as{x && <button x-on:keyup.enter={go} client:load.foo />}. -
#11440
b88f1eaThanks @Princesseuh! - Fixed a bare>in the children of an Astro expression being treated as markup, such as{x && <div>a > b</div>}. -
#11440
b88f1eaThanks @Princesseuh! - Fixed HTML comments inside an Astro expression failing to parse. They are now read as trivia, wherever they appear among the children.{x && <div><!-- first -->text<!-- last --></div>}{cond && <a></a><!-- c --><b></b>} -
#11440
b88f1eaThanks @Princesseuh! - Fixedis:rawchildren inside an Astro expression being read as JSX, such as{x && <div is:raw>{not js} < & text</div>}. -
#11440
b88f1eaThanks @Princesseuh! - Fixed an apostrophe or quote in the text of a JSX element inside an Astro expression ending the expression early, such as{items.map((i) => <li>it's {i}</li>)}. -
#11440
b88f1eaThanks @Princesseuh! - Fixed the children of a<script>or<style>inside an Astro expression being read as JSX. Their contents are text, so braces and comparisons no longer have to be escaped.{cond && <style>a { color: red }</style>}{cond && <script>let x = {a: 1};</script>} -
#11440
b88f1eaThanks @Princesseuh! - Added support for template literal attribute values inside an Astro expression, such as{x && <C data-x=`t${x}` />}. -
#11440
b88f1eaThanks @Princesseuh! - Fixed unquoted attribute values being rejected inside an Astro expression, such as{x && <a class=foo maxlength=255 href=/about>go</a>}. -
#11440
b88f1eaThanks @Princesseuh! - Fixed a template literal nested inside${}breaking the rest of an Astro file, such asconst href = `/blog${page === 0 ? '' : `/${page + 1}`}`;. -
#11440
b88f1eaThanks @Princesseuh! - Fixed a quote inside a regex character class breaking the rest of an Astro file, such asconst unsafe = /[/"]/;. -
#11508
54f3a2eThanks @dyc3! - Added the nursery ruleuseFlatMathMinMax. BecauseMath.min()andMath.max()accept any number of arguments, the rule reports unnecessary nested calls to the same method:Math.max(Math.max(a, b), c);The fix flattens this expression to
Math.max(a, b, c). -
#11585
c5c8315Thanks @Netail! - Fixed #11475:noUnresolvedImportsno longer reports Bun runtime built-in modules (bun,bun:bundle,bun:ffi,bun:jsc,bun:sqlite,bun:test). -
#11368
52a57b3Thanks @Austin1serb! - Fixed #6830: Biome now reports a diagnostic for excessively deep syntax instead of overflowing the native stack while releasing the parsed tree. -
#11596
1fc42edThanks @dyc3! - Added the nursery rulenoThisOutsideOfClass. The rule reportsthisoutside class members and TypeScript functions with an explicitthisparameter.function Person(name) {this.name = name;} -
#11555
2516335Thanks @dyc3! - Fixed #11529, wherenoFloatingPromisesmissed unhandled Promise chains when the imported function’s module belonged to an import cycle. Cyclic modules now preserve types for exports that do not participate in recursive type dependencies. -
#11518
0fee70cThanks @HarperZ9! - Fixed #11500: the formatter now prints thedeclaremodifier before accessibility modifiers on class properties.private declare readonly name: stringis now formatted asdeclare private readonly name: string, matching Prettier and TypeScript’s canonical modifier order. -
#11580
1277af2Thanks @ematipico! - Fixed #5091: Biome no longer moves comments next to the<of a generic, which causes invalid TypeScript syntax:Generic<// a commentGeneric<// a comment -
#11577
42995d2Thanks @ematipico! - Fixed #4592. Biome no longer crashes while parsing malformeddeleteexpressions. -
#11590
67963b4Thanks @ematipico! - Fixed #6427 so Grit plugins can usefunction = ...as a node argument. -
#11600
a689cb5Thanks @ematipico! - Fixed #6644:noUnusedVariablesnow recognizes all interface declarations in a TypeScript declaration-merging group when the interface is referenced.The following snippet no longer triggers the rule.
interface Things {foo: string;}interface Things {bar: string;}export type Key = keyof Things;interface Things {baz: string;} -
#11591
d4a0716Thanks @ematipico! - Fixed #6615.noDuplicatePropertiesno longer reports declarations nested in block at-rules as duplicates of declarations in their parent block. -
#11492
f2a07aaThanks @santichausis! - Fixed #11454:noMisplacedAssertionnow recognises@fast-check/vitest’stest.prop(...)(and.concurrent.prop,.skip.prop, etc.) as a test function, the same way it already recognisestest.each. The JS formatter picks up the same recognition, so a curriedtest.prop(...)(...)call is now formatted with the regular breakable argument layout used fortest.each/test.for, instead of the single-line-hugging layout used for plainit/testcalls.For example, Biome no longer reports the assertion below as misplaced:
import { fc, test } from "@fast-check/vitest";test.prop([fc.string()])("round-trips", (s) => {expect(s).toBe(s);}); -
#11589
65742b3Thanks @ematipico! - Fixed #4928:noUnusedVariablesno longer reports a value declaration as unused when its merged namespace is referenced. -
#11559
472dbc2Thanks @levrik! - Fixed a false positive innoVueDuplicateKeyswhere a<script setup>variable initialized frompropswas reported as a duplicate of the prop it derives from. Biome now exempts any variable whose initializer referencesprops, instead of only recognizingdefineProps()andtoRefs(props).For example, Biome no longer reports
foobelow as a duplicate key:<script setup>import { toRef } from 'vue';const props = defineProps(['foo']);const foo = toRef(props, 'foo');</script> -
#11594
6586cebThanks @ematipico! - Fixed #6640. Biome no longer crashes when linting malformedfor...ofstatements. -
#11571
85b197dThanks @ematipico! - Fixed #10838:useSortedAttributesno longer corrupts JSX attributes when nested JSX elements also require sorting. -
#11533
97e76c0Thanks @ematipico! - Fixed #11520, where the Biome scanner would start analysing dependencies multiple times, leading to long and unresponsive sessions. -
#11564
18a0e1fThanks @Netail! - Fixed the diagnostic range ofnoInferrableTypesso it now highlights only the type instead of including the leading:colon, spaces and comments. -
#11540
124fdaaThanks @ematipico! - Fixed#11537:noShorthandPropertyOverridesnow compares declarations only within the same block. The rule no longer reports@supportsfeature queries and correctly checks nested,@keyframes, and@pageblocks. -
#11532
7ceb0eeThanks @dyc3! - Fixed #11528:noFloatingPromisesno longer reports statement-levelawaitexpressions that handle Promise values, including overloaded calls returning Promise aliases. Awaited values that resolve to arrays of Promises remain reported because their element Promises are not handled byawait. -
#11474
3c6412eThanks @dyc3! - Fixed #10241. Biome no longer reports unsupported text expression diagnostics for double-curly text in vanilla HTML, and the formatter preserves adjacent curly-brace text. -
#11593
6c7fd27Thanks @dyc3! - Added the nursery rulenoVueDeprecatedScopedSlots. It reports deprecated$scopedSlotsreferences in Vue templates and component objects, and offers an unsafe replacement with$slots. For example, Biome now reportsthis.$scopedSlots.defaultinside a Vue component. -
#11440
b88f1eaThanks @Princesseuh! - Fixed the formatter crashing on an Astro or Svelte expression spanning several lines in a file with CRLF line endings, such as<p>{a +\r\n b}</p>. -
#11581
f4e5ebbThanks @dyc3! - Added the nursery ruleuseModernMathApis. The rule reports legacy mathematical patterns that have direct modernMathequivalents.Math.sqrt(a * a + b * b); -
#11597
a20f44aThanks @Netail! - Added the nursery rulenoBunModules, which forbids the use of Bun builtin modules (e.g.bun:sqlite,bun:ffi). -
#11545
7d54688Thanks @dyc3! - Fixed #11542: Biome now reports HTML comments between Svelte tag attributes as parse errors. -
#11582
b6611ddThanks @ematipico! - Fixed #3862. Biome now parses legacy Internet Explorerfilterand-ms-filtervalues such asprogid:DXImageTransform...andalpha(opacity=40). -
#11575
65da251Thanks @dyc3! - Improved the Tailwind parser’s ability to recover from parsing failures. Whitespace now always allows the parser to recover and start parsing a new class. -
#11576
0f78499Thanks @ematipico! - Fixed #3515 and #10395, where Biome could corrupt Unicode characters while writing source received through standard input to standard output. Characters such as⚠and✔are now preserved. -
#11539
0fca643Thanks @ematipico! - Fixed #11512, wherestyle/noDescendingSpecificitymissed lower-specificity selectors after a later higher-specificity selector with the same tail selector. -
#11544
040f867Thanks @dyc3! - Fixed #11541: formatting a Svelte render tag followed by an HTML comment no longer duplicates the comment.<div>{@render children?.()}<!-- comment --><!-- comment --></div> -
#11565
ee69e0eThanks @ematipico! - Fixed #11525. Now the configuration schema correctly provides auto-completion for linter domains. -
#11583
b19390cThanks @dyc3! - Fixed #11352:useExplicitLengthCheckno longer reportslength-like properties used as value-producing||fallbacks or optional chains, and it no longer offers fixes for value-producing&&checks or unsafe negations. -
#11562
753e955Thanks @ematipico! - Fixed an issue where the Biome Language Server would start with logging level set to debug. This would cause logs to grow exponentially in long sessions. -
#11217
7d3ee9cThanks @dyc3! - Fixed handling ofbiome-ignore formatsuppression comments on TypeScript declared class properties with string literal names.class A {declare /* biome-ignore format: exercise suppression checking */ 'a-b': 0;} -
#11497
f5d7896Thanks @dyc3! - Added thenoInvalidFileInputAcceptnursery rule. The rule reports invalid literalacceptvalues on file inputs in JSX and HTML, and normalizes common mistakes.<input type="file" accept="image/jpg" /> -
#11345
ac58958Thanks @jakeleventhal! - Improved type inference performance by avoiding resolution of unused members in object arguments. -
#11554
2d55931Thanks @Netail! - Added the new nursery ruleuseReactNamingConvention, which enforces naming conventions for React values assigned fromcreateContext,useId, anduseRef. A value fromcreateContextmust be a PascalCase component name ending withContext, a value fromuseIdmust be namedidor end withId, and a value fromuseRefmust be namedrefor end withRef. -
#11491
1d6210bThanks @dyc3! - Added the nursery rulenoUnmodifiedLoopCondition, which reports variables in loop conditions that are never modified in the loop.let node = getNode();while (node) {process(node);}
2.5.13
Patch Changes
-
#11379
07a0073Thanks @Netail! - Added the nursery ruleuseLayeredStyles, which enforces that style rules are defined within a cascade layer and import rules to import its styles into a cascade layer./* Invalid */@import 'foo.css';.my-style {color: red;}/* Valid */@import 'foo.css' layer(base);@layer base {.my-style {color: red;}} -
#11667
e997900Thanks @devtechedge! - Added the nursery ruleuseBetterDomTraversing, which prefers.firstChild,.firstElementChild,.closest(), and merged.querySelector()calls over positional DOM traversal.element.childNodes[0];element.children[0];element.parentElement.parentElement;element.querySelector("a").querySelector("b"); -
#11620
20e513aThanks @jakeleventhal! - Fixed #11610, #11611, #11612, #11615, and #11616: Biome no longer fully infers an imported generic declaration just to apply its type arguments, restoring type-aware lint performance for large libraries such as Zod. This improvesuseRegexpExec,noFloatingPromises,noMisusedPromises,useNullishCoalescing, andnoUnsafePlusOperands. -
#11657
e322040Thanks @ematipico! - Fixed #7495:noUselessConstructornow ignores TypeScript constructors that forward at least one argument tosuper, preserving constructors that narrow the subclass’s accepted parameter types. The exemption also applies when the parent and child signatures are identical; JavaScript and zero-argument forwarding behavior are unchanged. -
#11670
4969ee1Thanks @ematipico! - Fixed #7076:useAriaPropsForRoleanduseFocusableInteractiveno longer report non-focusable elements withrole="separator". A separator with an explicittabIndexortabindexstill requiresaria-valuenow. -
#11627
23aad6dThanks @ematipico! - Fixed #6571 so Grit plugins can capture and inspect multiple named import specifiers. -
#11631
00dbd3aThanks @ematipico! - Reduced unnecessary type inference when type-aware lint rules inspect members of namespace imports from libraries such as Zod. Fixed type inference so blanket re-exports do not expose default exports. -
#11628
a2f8ff7Thanks @dyc3! - Added the nursery rulenoXorAsExponentiation, which reports the bitwise XOR operator^between two decimal integer literals, where the exponentiation operator**was likely intended.const kibibyte = 2 ^ 10; // 8, not 1024 -
#11670
4969ee1Thanks @ematipico! - Fixed #7192:noUnusedPrivateClassMembersnow considers compound assignments such as??=to read and use private class members. -
#11676
840a52aThanks @dyc3! - Fixed #11672 and #11671 by disabling the experimental capitalized-call and effect-dependency checks inuseReactCompiler, matching their exclusion from upstream’s recommended lint preset. Valid calls such asIntl.NumberFormat()and captures of variables declared inside effects no longer produce these diagnostics. -
#11660
49485edThanks @ematipico! - Fixed #11653: Astro template suppression comments ({/* biome-ignore lint: reason */}) now suppress matching HTML lint diagnostics on the following line when full HTML support is enabled. -
#11664
9a73b9cThanks @dyc3! - Improved the performance ofuseRegexpExec. -
#11661
5341b3fThanks @ematipico! - Fixed #7479.noUnusedVariablesnow treats Unicode escapes in identifiers as the same binding as their decoded spelling. -
#11630
62e1fc5Thanks @dyc3! - Fixed the HTML formatter inserting whitespace between adjacent Svelte expressions when their combined length exceeds the line width.<span>{head.median - base.median >= 0 ? "+" : "−"}{formatMs(Math.abs(head.median - base.median))}{head.median - base.median >= 0 ? "+" : "−"}{formatMs(Math.abs(head.median - base.median))}</span> -
#11658
ed4bfa4Thanks @fredrikblau! - Fixed #11644:useHeadingContentno longer reports headings that render their text with a directive:set:htmlandset:textin Astro files,v-htmlandv-textin Vue files.<h1 set:html={heading} /><h2 set:text={heading}></h2><template><h1 v-html="heading"></h1><h2 v-text="heading"></h2></template> -
#11613
47d7383Thanks @ematipico! - Improved the performance of Biome Formatter up to ~50% in some cases. -
#11655
fd8fc74Thanks @ematipico! - Fixed #6974, wherenoUnusedPrivateClassMembersincorrectly reported TypeScript private constructor properties read through object destructuring fromthisas unused. -
#11618
21a10cfThanks @siketyan! - Fixed #11605: Type inference now infers the type of an unannotated callback parameter from the signature of the function the callback is passed to, and honours explicit type arguments on call expressions. This improves type-aware analysis fornoBaseToString,noFloatingPromises,noMisleadingReturnType,noMisusedPromises,noUnnecessaryConditions,noUnsafePlusOperands,noUselessTypeConversion,useArrayFind,useArraySortCompare,useAwaitThenable,useDisposables,useExhaustiveSwitchCases,useIncludes,useNullishCoalescing,useRegexpExec, anduseStringStartsEndsWith. For example,noFloatingPromisescan now detect Promises reached through such parameters:interface Context {doSomething(): Promise<void>;}declare function test(callback: (ctx: Context) => Promise<void>): void;test(async (ctx) => {ctx.doSomething(); // now reported as a floating promise}); -
#11698
b019982Thanks @denbezrukov! - Fixed parsing of unquoted CSS URLs beginning with@or!, such asurl(@/assets/icon.svg)andurl(!font.woff2). Preserved escaped and non-ASCII whitespace in raw URLs during formatting.background-image: url(image\);background-image: url(image\ ); -
#11622
c23e4c7Thanks @Netail! - Added the nursery rulenoUnsafeIframeSandbox, which reportsiframeelements whosesandboxattribute combinesallow-scriptsandallow-same-origin, since that combination lets the embedded document remove its own sandboxing.<iframe src="https://example.com" sandbox="allow-scripts allow-same-origin" /> -
#11606
de0528fThanks @dyc3! - Added the recommendednoSvelteAtHtmlTagsnursery rule, which reports Svelte{@html}tags that render unescaped HTML. -
#11670
4969ee1Thanks @ematipico! - Fixed #6782: GritQL plugins now match captured JSX component names against code snippets such asReact.Fragment. -
#11687
09d97d9Thanks @hori-design! - Fixed #11678:useReactCompilerno longer panics on files that contain non-ASCII characters. This bumps the React Compiler version. -
#11595
a64d757Thanks @dyc3! - Added the nursery Vue-domain ruleuseVueBaseImportrule, which enforces importing Vue APIs fromvueinstead of internal@vue/*packages. -
#11675
353cbaeThanks @dyc3! - FixeduseReactCompilersilently producing no diagnostics in WebAssembly builds, including the playground. -
#11625
ea20e5aThanks @denbezrukov! - Improved linting performance for large CSS and JSON files. -
#11670
4969ee1Thanks @ematipico! - Fixed #7527: suppression actions for diagnostics emitted on comments are now inserted before the diagnostic comment. In particular, suppressingnoTsIgnorenow places thebiome-ignorecomment before@ts-ignore. -
#11655
fd8fc74Thanks @ematipico! - Fixed #8629, wherenoUnusedPrivateClassMembersincorrectly reported used private TypeScript method overload signatures as unused. -
#11669
579f401Thanks @denbezrukov! - Improved the performance ofnoExcessiveLinesPerFilewhenskipBlankLinesisfalse.
2.5.14 Latest
Patch Changes
-
#9022
0d49e24Thanks @dyc3! - Added the nursery rulenoReturnInFinally. This rule disallows return statements inPromise.prototype.finally()callbacks, including inside nested blocks and conditional branches. Returns in nested functions are ignored by the rule.// Invalid: return in finally callbackPromise.resolve(1).finally(() => { return 2 })// Valid: no return in finally callbackPromise.resolve(1).finally(() => { console.log(2) })Returning a value from a
Promise.prototype.finally()callback does not replace the original promise’s fulfillment value, which can be confusing. Returned promises and thenables are awaited, and their rejection rejects the resulting promise. -
#11754
71eaa0dThanks @griff-rees! - Added the nursery rulenoSvelteAtDebugTags, which disallows Svelte’s{@debug}tag.<!-- Invalid: leftover debugging tag -->{@debug user}The
{@debug}tag is a debugging aid and should be removed once you no longer need it, as it should not remain in production code. The rule provides a safe fix that removes the tag. -
#11725
5eb5f09Thanks @m1handr! - Added the nursery ruleuseValidTestTitle, which enforces valid titles for unit test cases and suites. -
#11735
9bd70c7Thanks @ematipico! - Fixed #8471:source.fixAll.biomeignoredformatter.formatWithErrors. It now applies safe fixes without formatting files that have parse errors when the option is disabled. -
#11715
f05a3c3Thanks @ematipico! - Fixed #7771: Grit plugins that usesequentialno longer panic when Biome processes files. -
#11766
c2542c6Thanks @dyc3! - Fixed validation ofreadonlyandaccessormodifiers: combining them in either order now reports that they cannot be used together. -
#11461
22e9966Thanks @FoundDream! - Fixed #11423: Multiline template interpolations now preserve the indentation of their closing brace when the source indentation is not a multiple oftabWidth.const value = `${condition? "yes": "no"}}`; -
#11766
c2542c6Thanks @dyc3! - Fixed #11763: TypeScript class members usingoverride accessor, such asoverride accessor value = 1, now parse correctly. The reversed order,accessor override, now reports thatoverridemust precedeaccessor. -
#11790
17d0ff0Thanks @ematipico! - Fixed #10248:noUselessFragmentsnow allows fragments with props in Astro files, such as<Fragment slot="name">{text}</Fragment>inside template expressions. -
#11777
7ee3a6cThanks @ematipico! - Fixed #7573: added therequireExplicitCaseoption touseExhaustiveSwitchCases. When set totrue, the rule reports missing cases even when the switch has adefaultclause, so you can keep a runtime fallback while checking that every value in the union has its own case. The option defaults tofalse. -
#11751
d37f24bThanks @ematipico! - Fixed #8347: the fix fromuseConsistentArrowReturnnow parenthesizes returned expressions that begin with object literals before removing the arrow function body braces, preventing invalid output for expressions such as object property access. -
#11784
46e8912Thanks @dyc3! - Fixed #11782:noUndeclaredCustomPropertiescould hang while checking stylesheets imported by JavaScript modules with many shared dependencies. -
#11731
1534885Thanks @ematipico! - Fixed #7984: The fix fromuseSimplifiedLogicExpressionnow preserves line breaks in multiline conditions with line comments, preventing the right-hand side condition from being commented out. -
#11735
9bd70c7Thanks @ematipico! - Fixed #7304: the HTML formatter now preserves authored segment breaks between CJK characters, and next to CJK punctuation, instead of replacing them with spaces.<div lang="zh-Hant-TW">這個段落是那麼長, 在一行寫不行。這個段落是那麼長,在一行寫不行。</div> -
#11749
ff992a1Thanks @ematipico! - Fixed #11747: formatting and checking large parenthesized object expressions no longer exhibit quadratic slowdowns. -
#11736
1dd1fc4Thanks @dyc3! - Fixed #8177: code actions no longer modify the wrong part of Vue, Svelte, or Astro files when experimental full HTML support is disabled. -
#11743
3835945Thanks @santichausis! - Fixed #10247:biome check --write/biome lint --writenow correctly writes fixes for code inside an HTML attribute expression (for example a Svelteonclick={...}handler, or a mustache expression like{count}), instead of silently reporting the diagnostic as fixable and applying nothing.For example, running
biome lint --write --unsafeforuseBlockStatements(an unsafe fix) on this Svelte component used to leave the file unchanged:<button onclick={() => { if (open) close(); }}>Close</button> -
#11740
8ea8b4aThanks @dyc3! - Fixed #11453:useConsistentTestItnow updates imports alongside calls, preserving the original export through an alias. The rule ignores locally declared functions and withholds fixes when the preferred name would conflict with another binding or global reference. -
#11355
27177caThanks @dyc3! - Fixed the HTML formatter incorrectly applying native HTML element formatting to PascalCase component names such as<Ul>and<Body>in Vue, Svelte, and Astro files.<Body><div>content</div></Body><Body><div>content</div></Body> -
#11355
27177caThanks @dyc3! - Fixed the HTML formatter incorrectly applying SVG block formatting to unknown elements whose names matched SVG element names.<foreignobject><div>content</div></foreignobject><foreignobject><div>content</div></foreignobject> -
#11741
fc69047Thanks @dyc3! - Fixed #8893:useImportExtensionsno longer suggests adding.tsto.jsximports when a colocated.d.tsfile provides type declarations. -
#11642
c87341cThanks @dyc3! - Added the nursery rule useConsistentFunctionStyle, which requires a consistent style for defining functions.By default, the rule reports the following declaration because it requires a function expression assigned to a variable:
function greet() {return "Hello";} -
#11770
ddfd622Thanks @dyc3! - Fixed #8980: suppression comments targeting the entireassistcategory are now respected, includingbiome-ignore-all assistwhen runningcheck. -
#11792
7a4b895Thanks @dyc3! - Fixed dashed utility base names in the Tailwind parser, includingborder-bs,font-features, andscrollbar-thumb. Classes such asmin-inline-[12rem]now preserve the complete base name and parse the arbitrary value separately. -
#11739
1fc17e3Thanks @Netail! - The ruleuseIncludesnow also reportslastIndexOf()comparisons andsome()calls with a strict-equality callback.arr.lastIndexOf(x) !== -1arr.some(item => item === x) -
#11735
9bd70c7Thanks @ematipico! - Fixed #6888. GritQL plugins can now usecontainson import-clause metavariables such as$clauseinimport $clause from "module"patterns. -
#11790
17d0ff0Thanks @ematipico! - Fixed #11786:useAnchorContentnow reports anchors without accessible content in HTML, Astro, Vue, and Svelte even when they have anaria-label,aria-labelledby, ortitleattribute, matching JSX behavior. -
#11651
a9c4aa0Thanks @saberoueslati! - Added the new nursery rulenoVueUndeclaredDirectives, which reports custom Vue directives that are not declared by a<script setup>binding, the component’sdirectivesoption, or the rule’sglobalsoption. Closes #11478.<template><!-- v-highlight is not declared anywhere --><div v-highlight></div></template>Aliased named imports in single-file components are now tracked under their local name, so
noUndeclaredVariablesrecognizesvHighlightinimport { highlight as vHighlight } from "./directives". -
#11715
f05a3c3Thanks @ematipico! - Fixed #7795. ThenoJsxLiteralsrule now ignores surrounding whitespace when matching literals againstallowedStrings. -
#11780
99c7049Thanks @ematipico! - Fixed false positives inuseExhaustiveSwitchCaseswhen numeric cases use different spellings of the same value. For example,case 0x1now covers the numeric literal type1. -
#11720
c7c4e2bThanks @ematipico! - Fixed #7880:noUselessStringConcatno longer reports literal concatenations split across multiple lines when a numeric literal ends the chain. -
#11355
27177caThanks @dyc3! - Improved performance of the HTML formatter for documents that contain many HTML-native or SVG-native tags. -
#11720
c7c4e2bThanks @ematipico! - Fixed #7949:useReadonlyClassPropertiesnow reports static class properties that are never reassigned. -
#11751
d37f24bThanks @ematipico! - Fixed #7644:useImportExtensionsnow resolves path aliases declared by referenced TypeScript project configurations. -
#11791
f88793cThanks @dyc3! - Fixed a false positive inuseTailwindShorthandClassesfor strings in conditional tests, such ascn(m === "w-2 h-2" ? "bg-red-800" : "bg-red-400"). -
#11720
c7c4e2bThanks @ematipico! - Fixed #7783:noNoninteractiveElementInteractionsno longer reports event handlers on native<dialog>elements. -
#11733
7030068Thanks @dyc3! - Fixed #11730:useExhaustiveSwitchCasesreports missing cases when iterating over a class property withfor...of. -
#11717
2107daeThanks @ternaus! - Fixed #11716: thenoUnknownAttributerule now accepts fullscreen event handlers, thecredentiallessiframe property, and the SVGmaskTypeproperty when the React dependency range allows React 19.3 or later. ThecredentiallessandmaskTypeproperties are restricted to<iframe>and<mask>elements, respectively. -
#11737
b7e3559Thanks @dyc3! - Fixed #11692:noFloatingPromisesnow detects unhandled promises returned through generic method signatures, including Playwright fixtures. -
#11780
99c7049Thanks @ematipico! - Fixed #7747:useExhaustiveSwitchCasesnow reports missing cases for literal unions derived from const tuples with(typeof values)[number]and objects withkeyof typeof object.Other type-aware rules, including
noFloatingPromisesandnoUselessTypeConversion, also recognize supported indexed-access results. -
#11724
a9a5e9aThanks @dyc3! - Fixed redundant parentheses around binary and logical unary operands with leading line comments.!(// leading(a || b)a || b); -
#11715
f05a3c3Thanks @ematipico! - Fixed #7722:noUnusedImportsno longer reports type-only imports used in computed names of declared class properties. -
#11731
1534885Thanks @ematipico! - Fixed #6390: Biome now offers suppression actions fornoDynamicNamespaceImportAccessin editors. -
#11751
d37f24bThanks @ematipico! - Fixed #7533:noDescendingSpecificityno longer compares selector specificity across separate cascade layer blocks. -
#11735
9bd70c7Thanks @ematipico! - Fixed #6206:useUniqueElementIdsno longer reports static IDs on elements in SVG contexts.<svg><defs><pattern id="dots" width="10" height="10" /></defs><rect fill="url(#dots)" width="100%" height="100%" /></svg> -
#11715
f05a3c3Thanks @ematipico! - Fixed #5447, so the GitHub reporter now associates annotations with the correct files when Biome runs from a nested directory. -
#11720
c7c4e2bThanks @ematipico! - Fixed #7816:useHookAtTopLevelno longer reports methods named like hooks when called on another function’s result, such asReactotron.configure(...).useReactNative(...). -
#11355
27177caThanks @dyc3! - Removed special HTML formatter handling for the obsolete<listing>element. -
#11731
1534885Thanks @ematipico! - Fixed an issue where Grit plugin code fixes weren’t available as editor code actions. -
#11726
dea163fThanks @dyc3! - Fixed #11722: the JavaScript formatter inserts a newline before the closing angle bracket when a leading comment forces type arguments onto multiple lines.type Foo = Record<// commentstring,number>;number>; -
#9758
02ea438Thanks @Netail! - Added the nursery rulenoJsonUnsafeValues, which disallows JSON values that are unsafe to use between different tools or languages.Invalid:
[2e308, // Number evaluating to Infinity-2e308, // Number evaluating to -Infinity"\ud83d", // String with lone surrogate1e-400, // Unsafe zero (too small, will evaluate to 0)9007199254740992, // Unsafe integer (outside safe integer range)2.2250738585072009e-308, // Subnormal number] -
#11790
17d0ff0Thanks @ematipico! - Fixed #8574: the JavaScript formatter sometimes added extra parentheses and moved comments when formatting multiline expressions after operators such as!. Comments now stay beside the values they describe, without an extra pair of parentheses.!((cond1 || // force this to be multi linecond3) // commentcond1 || // force this to be multi linecond3 // comment); -
#11715
f05a3c3Thanks @ematipico! - Fixed #7711:biome lint --suppressno longer fails with conflicting rule fixes when multiple diagnostics target a declaration preceded by a multiline comment. -
#11700
0e9fe53Thanks @dyc3! - Added the nursery rulenoObsoleteTags, which reports obsolete HTML elements in HTML and JSX, such as<font color="red">Text</font>. -
#11735
9bd70c7Thanks @ematipico! - Fixed #7363: Biome GritQL plugins now match TypeScript interface snippets such asinterface $name { $body }. -
#11729
f047985Thanks @m1handr! - Added support forsuite()as an alias ofdescribe()across test analysis rules and formatter. Rules now recognizesuite,fsuite,xsuite, andtest.suiteblocks. The formatter recognises them as test declarations. -
#11778
4b7aa1fThanks @ematipico! - Fixed #7727: GritQL snippets such asimport $what from $wherenow match namespace imports, including type-only imports. Explicitimport type $what from $wherepatterns also match type-only named and namespace imports. -
#11715
f05a3c3Thanks @ematipico! - Fixed #7603:useSingleJsDocAsteriskno longer reports asterisks that are part of JSDoc comment content, such as italic text, as extra line markers. -
#11706
e19512aThanks @dyc3! - Fixed #11704: files re-included by negation patterns in a nested.gitignoreare processed whenvcs.useIgnoreFileis enabled, even when the ignore file contains*. -
#11718
76a302aThanks @dyc3! - Fixed #8573: own-line comments before binary operators stay above the operator whenjavascript.formatter.operatorLinebreakis"before".foo|| // commentbar;// comment|| bar; -
#9797
64fd314Thanks @Netail! - Added the nursery ruleuseConsistentObjectKeys, which requires JSON object keys to follow a consistent Unicode representation.
Copyright (c) 2023-present Biome Developers and Contributors.