Version History
Version 2.1.4
Patch Changes
-
#7121
b9642ab
Thanks @arendjr! - Fixed #7111: Imported symbols using aliases are now correctly recognised. -
#7103
80515ec
Thanks @omasakun! - Fixed #6933 and #6994.When the values of private member assignment expressions, increment expressions, etc. are used, those private members are no longer marked as unused.
-
#6887
0cc38f5
Thanks @ptkagori! - Added thenoQwikUseVisibleTask
rule to Qwik.This rule is intended for use in Qwik applications to warn about the use of
useVisibleTask$()
functions which require careful consideration before use.Invalid:
useVisibleTask$(() => {console.log("Component is visible");});Valid:
useTask$(() => {console.log("Task executed");}); -
#7084
50ca155
Thanks @ematipico! - Added the new nursery rulenoUnnecessararyConditions
, which detects whenever some conditions don’t change during the life cycle of the program, and truthy or false, hence deemed redundant.For example, the following snippets will trigger the rule:
// Always truthy literal conditionsif (true) {console.log("always runs");}// Unnecessary condition on constrained string typefunction foo(arg: "bar" | "baz") {if (arg) {// This check is unnecessary}} -
#6887
0cc38f5
Thanks @ptkagori! - Added theuseImageSize
rule to Biome.The
useImageSize
rule enforces the use of width and height attributes on<img>
elements for performance reasons. This rule is intended to prevent layout shifts and improve Core Web Vitals by ensuring images have explicit dimensions.Invalid:
<img src="/image.png" /><img src="https://example.com/image.png" /><img src="/image.png" width="200" /><img src="/image.png" height="200" />Valid:
<img width="200" height="600" src="/static/images/portrait-01.webp" /><img width="100" height="100" src="https://example.com/image.png" /> -
#6887
0cc38f5
Thanks @ptkagori! - Added theuseAnchorHref
rule to Biome.The
useAnchorHref
rule enforces the presence of anhref
attribute on<a>
elements in JSX. This rule is intended to ensure that anchor elements are always valid and accessible.Invalid:
<a>Link</a><a target="_blank">External</a>Valid:
<a href="/home">Home</a><a href="https://example.com" target="_blank">External</a> -
#7100
29fcb05
Thanks @Jayllyz! - Added the rulenoNonNullAssertedOptionalChain
.This rule prevents the use of non-null assertions (
!
) immediately after optional chaining expressions (?.
). Optional chaining is designed to safely handle nullable values by returningundefined
when the chain encountersnull
orundefined
. Using a non-null assertion defeats this purpose and can lead to runtime errors.// Invalid - non-null assertion after optional chainingobj?.prop!;obj?.method()!;obj?.[key]!;obj?.prop!;// Valid - proper optional chaining usageobj?.prop;obj?.method();obj?.prop ?? defaultValue;obj!.prop?.method(); -
#7129
9f4538a
Thanks @drwpow! - Removed option, combobox, listbox roles from useSemanticElements suggestions -
#7106
236deaa
Thanks @arendjr! - Fixed #6985: Inference of return types no longer mistakenly picks up return types of nested functions. -
#7102
d3118c6
Thanks @omasakun! - Fixed #7101:noUnusedPrivateClassMembers
now handles members declared as part of constructor arguments:- If a class member defined in a constructor argument is only used within the constructor, it removes the
private
modifier and makes it a plain method argument. - If it is not used at all, it will prefix it with an underscore, similar to
noUnusedFunctionParameter
.
- If a class member defined in a constructor argument is only used within the constructor, it removes the
-
#7104
5395297
Thanks @harxki! - Reverting to prevent regressions around ref handling -
#7143
1a6933a
Thanks @siketyan! - Fixed #6799: ThenoImportCycles
rule now ignores type-only imports if the newignoreTypes
option is enabled (enabled by default).[!WARNING] Breaking Change: The
noImportCycles
rule no longer detects import cycles that include one or more type-only imports by default. To keep the old behaviour, you can turn off theignoreTypes
option explicitly:{"linter": {"rules": {"nursery": {"noImportCycles": {"options": {"ignoreTypes": false}}}}}} -
#7099
6cc84cb
Thanks @arendjr! - Fixed #7062: Biome now correctly considers extended configs when determining the mode for the scanner. -
#6887
0cc38f5
Thanks @ptkagori! - Added theuseQwikClasslist
rule to Biome.This rule is intended for use in Qwik applications to encourage the use of the built-in
class
prop (which accepts a string, object, or array) instead of theclassnames
utility library.Invalid:
<div class={classnames({ active: true, disabled: false })} />Valid:
<div classlist={{ active: true, disabled: false }} /> -
#7019
57c15e6
Thanks @fireairforce! - Added support in the JS parser forimport source
(a stage3 proposal). The syntax looks like:import source foo from "<specifier>"; -
#7053
655049e
Thanks @jakeleventhal! - Added theuseConsistentTypeDefinitions
rule.This rule enforces consistent usage of either
interface
ortype
for object type definitions in TypeScript.The rule accepts an option to specify the preferred style:
interface
(default): Prefer usinginterface
for object type definitionstype
: Prefer usingtype
for object type definitions
Examples:
// With default option (interface)// ❌ Invalidtype Point = { x: number; y: number };// ✅ Validinterface Point {x: number;y: number;}// With option { style: "type" }// ❌ Invalidinterface Point {x: number;y: number;}// ✅ Validtype Point = { x: number; y: number };The rule will automatically fix simple cases where conversion is straightforward.
Copyright (c) 2023-present Biome Developers and Contributors.