@biomejs/biome 2.4.9
2.4.9
Patch Changes
-
#9315
085d324Thanks @ematipico! - Added a new nursery CSS rulenoDuplicateSelectors, that disallows duplicate selector lists within the same at-rule context.For example, the following snippet triggers the rule because the second selector and the first selector are the same:
/* First selector */ .x .y .z { } /* Second selector */ .x { .y { .z { } } } -
#9567
b7ab931Thanks @ematipico! - Fixed #7211:useOptionalChainnow detects negated logical OR chains. The following code is now considered invalid:!foo || !foo.bar; -
#8670
607ebf9Thanks @tt-a1i! - Fixed #8345:useAdjacentOverloadSignaturesno longer reports false positives for static and instance methods with the same name. Static methods and instance methods are now treated as separate overload groups.class Kek { static kek(): number { return 0; } another(): string { return ""; } kek(): number { return 1; } // no longer reported as non-adjacent } -
#9476
97b80a8Thanks @masterkain! - Fixed#9475: Fixed a panic when Biome analyzed ambient TypeScript modules containing class constructor, getter, or setter signatures that reference local type aliases. Biome now handles these declarations without crashing during semantic analysis. -
#9553
0cd5298Thanks @dyc3! - Fixed a bug where enabling the rules of a whole group, would enable rules that belonged to a domain under the same group.For example,
linter.rules.correctness = "error"no longer enables React- or Qwik-specific correctness rules unlesslinter.domains.react,linter.domains.qwik, or an explicit rule config also enables them, or their relative dependencies are installed. -
#9586
4cafb71Thanks @dyc3! - Fixed #8828: Grit patterns usingexport { $foo } from $sourcenow match named re-exports in JavaScript and TypeScript files. -
#9550
d4e3d6eThanks @dyc3! - Fixed #9548: Biome now parses conditional expressions whose consequent is an arrow function returning a parenthesized object expression. -
#8696
a7c19ccThanks @Faizanq! - Fixed #8685 wherenoUselessLoneBlockStatementswould remove empty blocks containing comments. The rule now preserves these blocks since comments may contain important information like TODOs or commented-out code. -
#9557
6671ac5Thanks @datalek! - Fixed #9557: Biome's LSP server no longer crashes on startup when used with editors that don't sendworkspaceFoldersduring initialization. This affected any LSP client that only sendsrootUri, which is valid per the LSP specification. -
#9455
1710cf1Thanks @omar-y-abdi! - Fixed #9174:useExpectnow correctly rejects asymmetric matchers in Vitest or Jest likeexpect.stringContaining(),expect.objectContaining(), and utilities likeexpect.extend()that are not valid assertions. Previously these constructs caused false negatives, allowing tests without real assertions to pass the lint rule. -
#9584
956e367Thanks @ematipico! - Fixed a bug where Vue directive attribute values likev-bind:class="{'dynamic': true}"were incorrectly parsed as JavaScript statements instead of expressions. Object literals inside directive values like:class,v-if, andv-htmlare now correctly parsed as expressions, preventing spurious parse errors. -
#9474
e168494Thanks @ematipico! - Added the new nursery rulenoUntrustedLicenses. This rule disallows dependencies that ship with invalid licenses or licenses that don't meet the criteria of your project/organisation.The rule has the following options:
allow: a list of licenses that can be allowed. Useful to bypass possible invalid licenses from downstream dependencies.deny: a list of licenses that should trigger the rule. Useful to deny licenses that don't fit your project/organisation. When bothdenyandalloware provided,denytakes precedence.requireOsiApproved: whether the licenses need to be approved by the Open Source Initiative.requireFsfLibre: whether the licenses need to be approved by the Free Software Foundation.
-
#9544
723798bThanks @ViniciusDev26! - Added an unsafe fix touseConsistentMethodSignaturesthat automatically converts between method-style and property-style signatures. -
#9555
8a3647bThanks @ematipico! - Fixed#188: the Biome Language Server no longer panics when open files change abruptly, such as during git branch checkouts. -
#9605
f65c637Thanks @ematipico! - Fixed #9589. Now Biome correctly parses object expressions inside props and directives. The following code doesn't emit errors anymore:<style is:global define:vars={{ bgLight: light }}> <Component name={{ first, name }} /> -
#9565
ccb249eThanks @eyupcanakman! - Fixed #9505:noUselessStringConcatno longer reports tagged template literals as useless string concatenations. Tagged templates invoke a function and can return non-string values, so combining them with+is not equivalent to a single template literal. -
#9534
4d050dfThanks @Netail! - Added the nursery rulenoInlineStyles. The rule disallows the use of inlinestyleattributes in HTML and thestyleprop in JSX, includingReact.createElementcalls. Inline styles make code harder to maintain and can interfere with Content Security Policy. -
#9611
cddaa44Thanks @gaauwe! - Fixed a regression where Biome LSP could misread editor settings sent throughworkspace/didChangeConfigurationwhen the payload was wrapped in a top-levelbiomekey. This causedrequireConfigurationand related settings to be ignored in some editors.
What's Changed
- fix(linter): differentiate static/instance methods in useAdjacentOverloadSignatures by @tt-a1i in https://github.com/biomejs/biome/pull/8670
- fix(parse/js): fix a case where valid js was being interpretted as ts by @dyc3 in https://github.com/biomejs/biome/pull/9550
- fix(lsp): gracefully handle panics by @ematipico in https://github.com/biomejs/biome/pull/9555
- fix(linter): don't remove empty blocks containing comments by @Faizanq in https://github.com/biomejs/biome/pull/8696
- fix(config): don't enable rules with domains when categories are enabled by @dyc3 in https://github.com/biomejs/biome/pull/9553
- fix(lint/useExpect): reject asymmetric matchers and utilities as assertions by @omar-y-abdi in https://github.com/biomejs/biome/pull/9455
- chore(deps): update rust crate bpaf to 0.9.24 by @renovate[bot] in https://github.com/biomejs/biome/pull/9500
- refactor(markdown-parser): decompose
is_inline_htmlinto predicate-per-construct by @jfmcdowell in https://github.com/biomejs/biome/pull/9467 - refactor(markdown-parser): decompose
inline_list_source_leninto scan helpers by @jfmcdowell in https://github.com/biomejs/biome/pull/9468 - fix(deps): update @biomejs packages by @renovate[bot] in https://github.com/biomejs/biome/pull/9501
- fix(js-semantic): register ambient signature scopes by @masterkain in https://github.com/biomejs/biome/pull/9476
- fix(useOptionalChain): fix negated expressions by @ematipico in https://github.com/biomejs/biome/pull/9567
- docs: fix CONTRIBUTING.md codeblock by @Netail in https://github.com/biomejs/biome/pull/9573
- chore: fix vulnerabilities in dependencies by @ematipico in https://github.com/biomejs/biome/pull/9576
- fix(lint): skip noUselessStringConcat for tagged templates by @eyupcanakman in https://github.com/biomejs/biome/pull/9565
- chore(bench/html): add real test fixtures to biome_html_analyze benches by @dyc3 in https://github.com/biomejs/biome/pull/9578
- fix(core): correctly parse vue directives as expressions by @ematipico in https://github.com/biomejs/biome/pull/9584
- feat: apply fix to use consistent method signatures by @ViniciusDev26 in https://github.com/biomejs/biome/pull/9544
- chore: add eslint-migrate-options skill by @dyc3 in https://github.com/biomejs/biome/pull/9575
- test: refactor formatter testing infra by @ematipico in https://github.com/biomejs/biome/pull/9588
- feat(analyze): implement noInlineStyles by @Netail in https://github.com/biomejs/biome/pull/9534
- chore(deps): update docker/dockerfile:1 docker digest to 4a43a54 by @renovate[bot] in https://github.com/biomejs/biome/pull/9590
- chore(deps): update rust:1.94.0-bullseye docker digest to 1695019 by @renovate[bot] in https://github.com/biomejs/biome/pull/9591
- chore(deps): update rust:1.94.0-trixie docker digest to f17e723 by @renovate[bot] in https://github.com/biomejs/biome/pull/9593
- fix(deps): update dependency tailwindcss to ^4.2.2 by @renovate[bot] in https://github.com/biomejs/biome/pull/9594
- chore(deps): update dependency eslint to v9.39.4 by @renovate[bot] in https://github.com/biomejs/biome/pull/9497
- chore(deps): update dependency @types/node to v24.12.0 by @renovate[bot] in https://github.com/biomejs/biome/pull/9595
- chore(deps): update dependency dprint to v0.53.0 by @renovate[bot] in https://github.com/biomejs/biome/pull/9596
- chore(deps): update github-actions by @renovate[bot] in https://github.com/biomejs/biome/pull/9598
- chore(deps): update pnpm to v10.32.1 by @renovate[bot] in https://github.com/biomejs/biome/pull/9599
- ci: fix failure by @ematipico in https://github.com/biomejs/biome/pull/9603
- fix(lsp): crash when client does not send workspaceFolders in InitializeParams by @datalek in https://github.com/biomejs/biome/pull/9557
- fix(core): astro embedding detection by @ematipico in https://github.com/biomejs/biome/pull/9605
- chore(deps): update dependency tombi to v0.9.7 by @renovate[bot] in https://github.com/biomejs/biome/pull/9597
- feat(css): add
noDuplicateSelectorsby @ematipico in https://github.com/biomejs/biome/pull/9315 - chore: convince robots into self identifying by @dyc3 in https://github.com/biomejs/biome/pull/9610
- fix(lsp): handle wrapped settings in didChangeConfiguration by @gaauwe in https://github.com/biomejs/biome/pull/9611
- feat(linter): add rule
noUntrustedLicensesby @ematipico in https://github.com/biomejs/biome/pull/9474 - chore: use npmx.dev badge by @ematipico in https://github.com/biomejs/biome/pull/9614
- docs: break down skills, improve existing ones by @ematipico in https://github.com/biomejs/biome/pull/9613
- chore(deps): update rust crate quickcheck to 1.1.0 by @renovate[bot] in https://github.com/biomejs/biome/pull/9600
- perf(html): inline parse functions by @ematipico in https://github.com/biomejs/biome/pull/9609
- fix(grit): fix queries for
export { $foo } ...by @dyc3 in https://github.com/biomejs/biome/pull/9586 - ci: release by @github-actions[bot] in https://github.com/biomejs/biome/pull/9620
New Contributors
- @omar-y-abdi made their first contribution in https://github.com/biomejs/biome/pull/9455
- @masterkain made their first contribution in https://github.com/biomejs/biome/pull/9476
- @eyupcanakman made their first contribution in https://github.com/biomejs/biome/pull/9565
- @datalek made their first contribution in https://github.com/biomejs/biome/pull/9557
Full Changelog: https://github.com/biomejs/biome/compare/@biomejs/biome@2.4.8...@biomejs/biome@2.4.9