@biomejs/biome 2.1.4
2.1.4
Patch Changes
-
#7121
b9642abThanks @arendjr! - Fixed #7111: Imported symbols using aliases are now correctly recognised. -
#7103
80515ecThanks @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
0cc38f5Thanks @ptkagori! - Added thenoQwikUseVisibleTaskrule 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
50ca155Thanks @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 conditions if (true) { console.log("always runs"); }// Unnecessary condition on constrained string type function foo(arg: "bar" | "baz") { if (arg) { // This check is unnecessary } } -
#6887
0cc38f5Thanks @ptkagori! - Added theuseImageSizerule to Biome.The
useImageSizerule 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
0cc38f5Thanks @ptkagori! - Added theuseAnchorHrefrule to Biome.The
useAnchorHrefrule enforces the presence of anhrefattribute 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
29fcb05Thanks @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 returningundefinedwhen the chain encountersnullorundefined. Using a non-null assertion defeats this purpose and can lead to runtime errors.// Invalid - non-null assertion after optional chaining obj?.prop!; obj?.method()!; obj?.[key]!; obj?.prop!; // Valid - proper optional chaining usage obj?.prop; obj?.method(); obj?.prop ?? defaultValue; obj!.prop?.method(); -
#7129
9f4538aThanks @drwpow! - Removed option, combobox, listbox roles from useSemanticElements suggestions -
#7106
236deaaThanks @arendjr! - Fixed #6985: Inference of return types no longer mistakenly picks up return types of nested functions. -
#7102
d3118c6Thanks @omasakun! - Fixed #7101:noUnusedPrivateClassMembersnow 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
privatemodifier 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
5395297Thanks @harxki! - Reverting to prevent regressions around ref handling -
#7143
1a6933aThanks @siketyan! - Fixed #6799: ThenoImportCyclesrule now ignores type-only imports if the newignoreTypesoption is enabled (enabled by default).[!WARNING] Breaking Change: The
noImportCyclesrule no longer detects import cycles that include one or more type-only imports by default. To keep the old behaviour, you can turn off theignoreTypesoption explicitly:{ "linter": { "rules": { "nursery": { "noImportCycles": { "options": { "ignoreTypes": false } } } } } } -
#7099
6cc84cbThanks @arendjr! - Fixed #7062: Biome now correctly considers extended configs when determining the mode for the scanner. -
#6887
0cc38f5Thanks @ptkagori! - Added theuseQwikClasslistrule to Biome.This rule is intended for use in Qwik applications to encourage the use of the built-in
classprop (which accepts a string, object, or array) instead of theclassnamesutility library.Invalid:
<div class={classnames({ active: true, disabled: false })} />Valid:
<div classlist={{ active: true, disabled: false }} /> -
#7019
57c15e6Thanks @fireairforce! - Added support in the JS parser forimport source(a stage3 proposal). The syntax looks like:import source foo from "<specifier>"; -
#7053
655049eThanks @jakeleventhal! - Added theuseConsistentTypeDefinitionsrule.This rule enforces consistent usage of either
interfaceortypefor object type definitions in TypeScript.The rule accepts an option to specify the preferred style:
interface(default): Prefer usinginterfacefor object type definitionstype: Prefer usingtypefor object type definitions
Examples:
// With default option (interface) // ❌ Invalid type Point = { x: number; y: number }; // ✅ Valid interface Point { x: number; y: number; } // With option { style: "type" } // ❌ Invalid interface Point { x: number; y: number; } // ✅ Valid type Point = { x: number; y: number };The rule will automatically fix simple cases where conversion is straightforward.
What's Changed
- ci: use faster runners on Windows by @ematipico in https://github.com/biomejs/biome/pull/7041
- chore: use own semver parser by @ematipico in https://github.com/biomejs/biome/pull/7061
- docs(analyze): about "Services" by @dyc3 in https://github.com/biomejs/biome/pull/7058
- feat(parse/tailwind): start implementing lexer/parser by @dyc3 in https://github.com/biomejs/biome/pull/6986
- feat(qwik): add few new lint rules by @ptkagori in https://github.com/biomejs/biome/pull/6887
- chore: add Claude sub-agents by @ematipico in https://github.com/biomejs/biome/pull/7066
- feat(format/html): implement suppression comments by @dyc3 in https://github.com/biomejs/biome/pull/5356
- feat: add tailwind domain by @dyc3 in https://github.com/biomejs/biome/pull/6972
- chore(lint): add version to the released rules by @siketyan in https://github.com/biomejs/biome/pull/7087
- chore(deps): update rust:1.88.0 docker digest to af306cf by @renovate[bot] in https://github.com/biomejs/biome/pull/7042
- chore(deps): update rust crate serde_json to 1.0.142 by @renovate[bot] in https://github.com/biomejs/biome/pull/7089
- chore(deps): update @biomejs packages by @renovate[bot] in https://github.com/biomejs/biome/pull/7091
- chore(deps): update dependency @types/node to v22.17.0 by @renovate[bot] in https://github.com/biomejs/biome/pull/7092
- chore(deps): update dependency eslint to v9.32.0 by @renovate[bot] in https://github.com/biomejs/biome/pull/7093
- chore(deps): update github-actions by @renovate[bot] in https://github.com/biomejs/biome/pull/7094
- chore(deps): update rust crate tokio to 1.47.1 by @renovate[bot] in https://github.com/biomejs/biome/pull/7096
- feat(analyze/js): added rule for
@typescript-eslint/consistent-type-definitionsby @jakeleventhal in https://github.com/biomejs/biome/pull/7053 - fix(core): consider extended configs for scan kind by @arendjr in https://github.com/biomejs/biome/pull/7099
- feat(analyse/js): add
noNonNullAssertedOptionalChainrule by @Jayllyz in https://github.com/biomejs/biome/pull/7100 - fix(core): return type inference no longer picks up nested returns by @arendjr in https://github.com/biomejs/biome/pull/7106
- fix(lint/noUnusedPrivateClassMembers): improve member usage check by @omasakun in https://github.com/biomejs/biome/pull/7103
- fix(lint/noUnusedPrivateClassMembers): handle class members declared in constructor parameters correctly by @omasakun in https://github.com/biomejs/biome/pull/7102
- chore: setup autofix.ci workflow by @arendjr in https://github.com/biomejs/biome/pull/7113
- revert: "fix(lint/noUnassignedVariables): handle JSX ref attribute ass… by @harxki in https://github.com/biomejs/biome/pull/7104
- feat(lint): rule
noUnnecessaryConditionsby @ematipico in https://github.com/biomejs/biome/pull/7084 - chore: add CodeRabbit config by @arendjr in https://github.com/biomejs/biome/pull/7114
- ci: use faster runners on depot by @siketyan in https://github.com/biomejs/biome/pull/7115
- feat(parser): support import source by @fireairforce in https://github.com/biomejs/biome/pull/7019
- chore: apply CodeRabbit nits by @arendjr in https://github.com/biomejs/biome/pull/7116
- fix(core): resolve aliased imports by @arendjr in https://github.com/biomejs/biome/pull/7121
- fix: remove option, combobox, listbox from semantic element suggestions by @drwpow in https://github.com/biomejs/biome/pull/7129
- feat(analyze/js): add noVueDataObjectDeclaration by @amousa11 in https://github.com/biomejs/biome/pull/6574
- feat(lint): add ignoreTypes option to the noImportCycles rule by @siketyan in https://github.com/biomejs/biome/pull/7143
- ci: release by @github-actions[bot] in https://github.com/biomejs/biome/pull/7069
New Contributors
- @jakeleventhal made their first contribution in https://github.com/biomejs/biome/pull/7053
- @omasakun made their first contribution in https://github.com/biomejs/biome/pull/7103
- @amousa11 made their first contribution in https://github.com/biomejs/biome/pull/6574
Full Changelog: https://github.com/biomejs/biome/compare/@biomejs/biome@2.1.3...@biomejs/biome@2.1.4