Impact Score: 5/10
Biome CLI v2.1.2
Source available โ automated, not human-reviewed
Component: @biomejs/biome ยท Channel: stable. Automated analysis, not a compatibility certification. How this works.
Analysis updated: 2026-11-01.
โก Executive Summary (TL;DR)
Biome @biomejs/[email protected]. Source highlight: Fix #6485: Handle multiple semicolons correctly in blocks (#6485)
Who Does This Impact? (Role-Based Analysis)
๐ป Software Engineers & Devs
Check the source notes against the package and APIs you use before upgrading.
๐ Product & Engineering Leads
Use the documented changes to assess relevance to your product; release frequency alone is not a quality measure.
โ๏ธ DevOps & Security
Verify the target version, runtime requirements and rollback procedure in the official documentation.
โจ New Features & Capabilities (6)
- `noFloatingPromises` will no longer suggest to add `await` keyword inside synchronous callbacks nested inside `async` functions.
- chore: add tracing span for `open_file_internal()`
- feat(html/parser): text expressions
- feat(lint): implement `noVueReservedProps` rule
- ci: add a job for linting markdown files
- feat: add global vscode and zed settings file to well known files
โก Performance & Enhancements (2)
- perf: faster function parameters in inference
- perf: optimise `noImportCycles`
๐ง Bug Fixes & Patches (6)
- Fix #6485: Handle multiple semicolons correctly in blocks (#6485)
- Fixed #6762, Biome now knows that `~/.config/zed/settings.json` and `~/.config/Code/User/settings.json` allows comments by default.
- Fixed #6838, where the Biome File Watcher incorrectly watched and stored ignored files, causing possible memory leaks when those files were dynamically created (e.g. built files).
- Refactor: remove one level of indirection for CSS declarations with semicolon
- Fixed a bug where the Biome Language Server didn't correctly ignore specific files when `vcs.useIgnoreFile` is set to `true`.
- Improved the performance of `noImportCycles` by ~30%.
๐ View Raw Release Notes (Original Developer Log)
## 2.1.2
### Patch Changes
- [#6865](https://github.com/biomejs/biome/pull/6865) [`b35bf64`](https://github.com/biomejs/biome/commit/b35bf6448fb1950c922e627254588e96748e287f) Thanks [@denbezrukov](https://github.com/denbezrukov)! - Fix [#6485](https://github.com/biomejs/biome/issues/6485): Handle multiple semicolons correctly in blocks (#6485)
```css
div {
box-sizing: border-box;
color: red;
}
```
- [#6798](https://github.com/biomejs/biome/pull/6798) [`3579ffa`](https://github.com/biomejs/biome/commit/3579ffaae4e86835b001fee4ab7dd8aabb03ae54) Thanks [@dyc3](https://github.com/dyc3)! - Fixed [#6762](https://github.com/biomejs/biome/issues/6762), Biome now knows that `~/.config/zed/settings.json` and `~/.config/Code/User/settings.json` allows comments by default.
- [#6839](https://github.com/biomejs/biome/pull/6839) [`4cd62d8`](https://github.com/biomejs/biome/commit/4cd62d8ae2e5cb24d6f308e05b38003486294548) Thanks [@ematipico](https://github.com/ematipico)! - Fixed [#6838](https://github.com/biomejs/biome/issues/6838), where the Biome File Watcher incorrectly watched and stored ignored files, causing possible memory leaks when those files were dynamically created (e.g. built files).
- [#6879](https://github.com/biomejs/biome/pull/6879) [`0059cd9`](https://github.com/biomejs/biome/commit/0059cd9b5e6ba33cabb5e153bd03e2041effb0cd) Thanks [@denbezrukov](https://github.com/denbezrukov)! - Refactor: remove one level of indirection for CSS declarations with semicolon
Previously, accessing a declaration from a list required an extra step:
```rust
item
.as_any_css_declaration_with_semicolon()
.as_css_declaration_with_semicolon()
```
Now, it can be done directly with:
```rust
item.as_css_declaration_with_semicolon()
```
- [#6839](https://github.com/biomejs/biome/pull/6839) [`4cd62d8`](https://github.com/biomejs/biome/commit/4cd62d8ae2e5cb24d6f308e05b38003486294548) Thanks [@ematipico](https://github.com/ematipico)! - Fixed a bug where the Biome Language Server didn't correctly ignore specific files when `vcs.useIgnoreFile` is set to `true`.
- [#6884](https://github.com/biomejs/biome/pull/6884) [`5ff50f8`](https://github.com/biomejs/biome/commit/5ff50f8291ca6f8f59fccfc326c8f0bdc3127842) Thanks [@arendjr](https://github.com/arendjr)! - Improved the performance of `noImportCycles` by ~30%.
- [#6903](https://github.com/biomejs/biome/pull/6903) [`241dd9e`](https://github.com/biomejs/biome/commit/241dd9e487226fc58b4ceceaf3164e36d8e22d3b) Thanks [@arendjr](https://github.com/arendjr)! - Fixed [#6829](https://github.com/biomejs/biome/issues/6829): Fixed a false positive reported by `useImportExtensions` when importing a `.js` file that had a matching `.d.ts` file in the same folder.
- [#6846](https://github.com/biomejs/biome/pull/6846) [`446112e`](https://github.com/biomejs/biome/commit/446112e79d695c50ca9cc9f2d25c91cf03115f50) Thanks [@darricheng](https://github.com/darricheng)! - Fixed an issue where biome was using the wrong string quotes when the classes string has quotes, resulting in invalid code after applying the fix.
- [#6823](https://github.com/biomejs/biome/pull/6823) [`eebc48e`](https://github.com/biomejs/biome/commit/eebc48e0120958a39186f510278e1e5eacad3f1c) Thanks [@arendjr](https://github.com/arendjr)! - Improved [#6172](https://github.com/biomejs/biome/issues/6172): Optimised the way function arguments are stored in Biome's type inference. This led to about 10% performance improvement in `RedisCommander.d.ts` and about 2% on `@next/font` type definitions.
- [#6878](https://github.com/biomejs/biome/pull/6878) [`3402976`](https://github.com/biomejs/biome/commit/340297602c1162928735d1c073d7a409c22e90bd) Thanks [@ematipico](https://github.com/ematipico)! - Fixed a bug where the Biome Language Server would apply an unsafe fix when using the code action `quickfix.biome`.
Now Biome no longer applies an unsafe code fix when using the code action `quickfix.biome`.
- [#6794](https://github.com/biomejs/biome/pull/6794) [`4d5fc0e`](https://github.com/biomejs/biome/commit/4d5fc0ef38f8c4ad820e297749efc83e983b5a91) Thanks [@vladimir-ivanov](https://github.com/vladimir-ivanov)! - Fixed [#6719](https://github.com/biomejs/biome/issues/6719): The `noInvalidUseBeforeDeclaration` rule covers additional use cases.
Examples:
```ts
type Bar = { [BAR]: true };
const BAR = "bar";
```
```ts
interface Bar {
child: { grandChild: { [BAR]: typeof BAR; enumFoo: EnumFoo } };
}
const BAR = "bar";
enum EnumFoo {
BAR = "bar",
}
```
- [#6863](https://github.com/biomejs/biome/pull/6863) [`531e97e`](https://github.com/biomejs/biome/commit/531e97e3f691e3ff34d2382fab414072ecb68e8b) Thanks [@dyc3](https://github.com/dyc3)! - Biome now considers whether the linter is enabled when figuring out how the project should be scanned. Resolves [#6815](https://github.com/biomejs/biome/issues/6815).
- [#6832](https://github.com/biomejs/biome/pull/6832) [`bdbc2b1`](https://github.com/biomejs/biome/commit/bdbc2b10ac21dcb35b41e93b17e712ba80f421ca) Thanks [@togami2864](https://github.com/togami2864)! - Fixed [#6165](https://github.com/biomejs/biome/issues/6165): Fixed false negative in [`noUnusedPrivateClassMembers`](https://biomejs.dev/linter/rules/no-unused-private-class-members/) rule when checking member usage in classes
- [#6839](https://github.com/biomejs/biome/pull/6839) [`4cd62d8`](https://github.com/biomejs/biome/commit/4cd62d8ae2e5cb24d6f308e05b38003486294548) Thanks [@ematipico](https://github.com/ematipico)! - Fixed a bug where the root ignore file wasn't correctly loaded during the scanning phase, causing false positives and incorrect expectations among users.
Now, when using `vcs.useIgnoreFile`, the **the globs specified in the ignore file from the project root** will have the same semantics as the `files.includes` setting of the root configuration.
Refer to the [relative web page](https://biomejs.dev/internals/architecture/#configuring-the-scanner) to understand how they work.
- [#6898](https://github.com/biomejs/biome/pull/6898) [`5beb024`](https://github.com/biomejs/biome/commit/5beb024d8e9af8733bc115ba4b07d20036fe336e) Thanks [@arendjr](https://github.com/arendjr)! - Fixed [#6891](https://github.com/biomejs/biome/issues/6891): Improved type inference for array indices.
**Example:**
```ts
const numbers: number[];
numbers[42]; // This now infers to `number | undefined`.
```
- [#6809](https://github.com/biomejs/biome/pull/6809) [`8192451`](https://github.com/biomejs/biome/commit/819245188e587d0a5ede53aa07899a2cb9fcce4f) Thanks [@arendjr](https://github.com/arendjr)! - Fixed [#6796](https://github.com/biomejs/biome/issues/6796): Fixed a false positive that happened in `noFloatingPromises` when calling functions that were declared as part of `for ... of` syntax inside `async` functions.
Instead, the variables declared inside `for ... of` loops are now correctly
inferred if the expression being iterated evaluates to an `Array` (support for other iterables will follow later).
**Invalid example**
```tsx
const txStatements: Array<(tx) => Promise<any>> = [];
db.transaction((tx: any) => {
for (const stmt of txStatements) {
// We correctly flag this resolves to a `Promise`:
stmt(tx);
}
});
```
**Valid example**
```tsx
async function valid(db) {
const txStatements: Array<(tx: any) => void> = [(tx) => tx.insert().run()];
db.transaction((tx: any) => {
for (const stmt of txStatements) {
// We don't flag a false positive here anymore:
stmt(tx);
}
});
}
```
- [#6757](https://github.com/biomejs/biome/pull/6757) [`13a0818`](https://github.com/biomejs/biome/commit/13a0818be8cc08efd303829252cbc3e64bcbca3a) Thanks [@mdevils](https://github.com/mdevils)! - Added the rule [`noVueReservedProps`](https://biomejs.dev/linter/rules/no-vue-reserved-props/), resolves [#6309](https://github.com/biomejs/biome/issues/6309).
It prevents the use of reserved Vue prop names such as `key` and `ref` which can cause conflicts and unexpected behavior in Vue components.
##### Invalid example
```js
import { defineComponent } from "vue";
export default defineComponent({
props: ["ref", "key", "foo"],
});
```
```vue
<script setup>
defineProps({
ref: String,
key: String,
foo: String,
});
</script>
```
##### Valid examples
```js
import { defineComponent } from "vue";
export default defineComponent({
props: ["foo"],
});
```
```vue
<script setup>
defineProps({ foo: String });
</script>
```
- [#6840](https://github.com/biomejs/biome/pull/6840) [`1a57b51`](https://github.com/biomejs/biome/commit/1a57b51097c7bf4faeb0dcc5330d49e17f86789b) Thanks [@denbezrukov](https://github.com/denbezrukov)! - Allow multiple identifiers in ::part() pseudo-element selector.
```css
::part(first second) {
}
```
- [#6845](https://github.com/biomejs/biome/pull/6845) [`4fd44ec`](https://github.com/biomejs/biome/commit/4fd44ec17a3ac6a5486ac94f01e85e62310b8061) Thanks [@arendjr](https://github.com/arendjr)! - Fixed [#6510](https://github.com/biomejs/biome/issues/6510): The scanner no longer shows diagnostics on inaccessible files unless `--verbose` is used.
- [#6844](https://github.com/biomejs/biome/pull/6844) [`b7e2d4d`](https://github.com/biomejs/biome/commit/b7e2d4d3a8b2654278596eaecdccc30405457fc8) Thanks [@sterliakov](https://github.com/sterliakov)! - Fixed [#6837](https://github.com/biomejs/biome/issues/6837): Fixed regression with multiple consecutive line suppression comments using instances (like `// biome-ignore lint/correctness/useExhaustiveDependencies(depName): reason`).
- [#6818](https://github.com/biomejs/biome/pull/6818) [`5f3f5a6`](https://github.com/biomejs/biome/commit/5f3f5a6e8c12b56dc36bcfb4f8d5077eb33ccf08) Thanks [@siketyan](https://github.com/siketyan)! - Fixed an issue where `textDocument/codeAction` in the LSP could respond with outdated text edits after the workspace watcher observed outdated changes to the file.
- [#6804](https://github.com/biomejs/biome/pull/6804) [`3e6ab16`](https://github.com/biomejs/biome/commit/3e6ab1663ab15f9f00ae069ee790e5fd90327082) Thanks [@arendjr](https://github.com/arendjr)! - `noFloatingPromises` will no longer suggest to add `await` keyword inside synchronous callbacks nested inside `async` functions.
- [#6901](https://github.com/biomejs/biome/pull/6901) [`c9e969a`](https://github.com/biomejs/biome/commit/c9e969a84158b29d175cd04ea8b921c737b7ed8f) Thanks [@arendjr](https://github.com/arendjr)! - Fixed [#6777](https://github.com/biomejs/biome/issues/6777): Fixed type inference handling of `this` to avoid infinite recursion.
Thanks to @sterliakov for the thorough investigation!
- [#6855](https://github.com/biomejs/biome/pull/6855) [`d1581c7`](https://github.com/biomejs/biome/commit/d1581c7c874b2917132a864d1c65df041ad9181b) Thanks [@vladimir-ivanov](https://github.com/vladimir-ivanov)! - Fixed [#6775](https://github.com/biomejs/biome/issues/6775): `useReadonlyClassProperties` now also captures mutations inside function arguments.
Example:
```ts
class Counter {
private counter: number;
count() {
console.log(this.counter++);
const counterString = `${this.counter++}`;
}
}
```
- [#6839](https://github.com/biomejs/biome/pull/6839) [`4cd62d8`](https://github.com/biomejs/biome/commit/4cd62d8ae2e5cb24d6f308e05b38003486294548) Thanks [@ematipico](https://github.com/ematipico)! - Fixed a bug where Biome didn't throw any error when `vcs.useIgnoreFile` is set to `true`, and there wasn't any ignore file read. Now Biome correctly throws an error if no ignore files are found.
- [#6911](https://github.com/biomejs/biome/pull/6911) [`6d68074`](https://github.com/biomejs/biome/commit/6d68074bf2a2ca4bc514398a180524394690fafe) Thanks [@arendjr](https://github.com/arendjr)! - Fixed [#6838](https://github.com/biomejs/biome/issues/6838): Reduce resource consumption in the Biome Language Server by using non-recursive filesystem watchers instead of recursive ones.
Watchers are responsible for notifying Biome of changes to files in the filesystem. We used to set up a single recursive watcher, but that meant that Biome would receive filesystem notifications for _all_ files in your project, even for ignored folders such as `build/` or `dist/` folders.
With this patch, we set up non-recursive watchers only for the folders that are relevant to a project.
Related to this, we also solved an issue where incoming notifications were incorrectly filtered, causing ignored files to be processed and stored in our module graph anyway.
## What's Changed
* chore: check milestone before releasing by @arendjr in https://github.com/biomejs/biome/pull/6791
* chore: add tracing span for `open_file_internal()` by @arendjr in https://github.com/biomejs/biome/pull/6803
* fix(core): correctly identify sync callbacks inside async functions by @arendjr in https://github.com/biomejs/biome/pull/6804
* fix(core): do not update the opened document when change observed by the watcher by @siketyan in https://github.com/biomejs/biome/pull/6818
* feat(html/parser): text expressions by @ematipico in https://github.com/biomejs/biome/pull/6802
* feat(lint): implement `noVueReservedProps` rule by @mdevils in https://github.com/biomejs/biome/pull/6757
* ci: add a job for linting markdown files by @dyc3 in https://github.com/biomejs/biome/pull/6825
* perf: faster function parameters in inference by @arendjr in https://github.com/biomejs/biome/pull/6823
* fix(core): infer for-of and for-in loop variables by @arendjr in https://github.com/biomejs/biome/pull/6809
* chore: fix typo by @nhedger in https://github.com/biomejs/biome/pull/6834
* fix(noUnusedPrivateClassMembers): improve member usage checks in the class by @togami2864 in https://github.com/biomejs/biome/pull/6832
* fix(core): silence diagnostics in scanner by @arendjr in https://github.com/biomejs/biome/pull/6845
* feat: add global vscode and zed settings file to well known files by @dyc3 in https://github.com/biomejs/biome/pull/6798
* fix(css_parser): support a list of identifiers in ::part() pseudo-element selector by @denbezrukov in https://github.com/biomejs/biome/pull/6840
* fix(biome_js_analyze): fixed noInvalidUseBeforeDeclaration false positives by @vladimir-ivanov in https://github.com/biomejs/biome/pull/6794
* fix: classes with single quotes in functions should use double quotes by @darricheng in https://github.com/biomejs/biome/pull/6846
* chore: fix `just new*` commands by @mdevils in https://github.com/biomejs/biome/pull/6853
* chore: fix `noVueReservedProps` changeset by @mdevils in https://github.com/biomejs/biome/pull/6858
* chore: remove platinum sponsor by @ematipico in https://github.com/biomejs/biome/pull/6854
* chore(deps): update github-actions by @renovate[bot] in https://github.com/biomejs/biome/pull/6869
* chore(deps): update dependency eslint to v9.31.0 by @renovate[bot] in https://github.com/biomejs/biome/pull/6868
* chore(deps): update dependency @types/node to v22.16.3 by @renovate[bot] in https://github.com/biomejs/biome/pull/6866
* chore(deps): update dependency @types/node to v22.16.3 by @renovate[bot] in https://github.com/biomejs/biome/pull/6867
* chore(deps): update typescript-eslint monorepo to v8.36.0 by @renovate[bot] in https://github.com/biomejs/biome/pull/6873
* feat(cli): consider configuration when selecting ScanKind by @dyc3 in https://github.com/biomejs/biome/pull/6863
* docs(noImportCycles): add note about computation cost by @dyc3 in https://github.com/biomejs/biome/pull/6864
* fix(css_parser): handle multiple semicolons correctly in blocks (#6485) by @denbezrukov in https://github.com/biomejs/biome/pull/6865
* fix(deps): update dependency prettier to v3.6.2 by @renovate[bot] in https://github.com/biomejs/biome/pull/6874
* chore(deps): update rust crate tokio to 1.46.1 by @renovate[bot] in https://github.com/biomejs/biome/pull/6871
* chore(deps): update rust crate criterion to v3 by @renovate[bot] in https://github.com/biomejs/biome/pull/6876
* fix(deps): update rust crates by @renovate[bot] in https://github.com/biomejs/biome/pull/6875
* fix(lsp): skip unsafe fixes with quick fixes by @ematipico in https://github.com/biomejs/biome/pull/6878
* perf: optimise `noImportCycles` by @arendjr in https://github.com/biomejs/biome/pull/6884
* refactor(css_parser): flatten AnyCssDeclarationWithSemicolon (#6912) by @denbezrukov in https://github.com/biomejs/biome/pull/6879
* feat(biome_js_analyze): added support for call expressions arguments by @vladimir-ivanov in https://github.com/biomejs/biome/pull/6855
* fix(core): scanner ignores files inside VCS by @ematipico in https://github.com/biomejs/biome/pull/6839
* fix(biome_analyze): restore support for multiple consecutive suppression comments with rule instances. by @sterliakov in https://github.com/biomejs/biome/pull/6844
* refactor: make Watcher aware of `ScanKind` by @arendjr in https://github.com/biomejs/biome/pull/6842
* fix(core): infer array indices by @arendjr in https://github.com/biomejs/biome/pull/6898
* fix(core): fix type inference of `this` by @arendjr in https://github.com/biomejs/biome/pull/6901
* fix(linter): fix false positive with `.d.ts` files in `useImportExtensions` by @arendjr in https://github.com/biomejs/biome/pull/6903
* ci: release by @github-actions[bot] in https://github.com/biomejs/biome/pull/6807
* Revert "ci: release" by @ematipico in https://github.com/biomejs/biome/pull/6908
* fix(cli): apply `--assist-enabled` by @ematipico in https://github.com/biomejs/biome/pull/6912
* fix(core): use non-recursive watchers by @arendjr in https://github.com/biomejs/biome/pull/6911
* feat(yaml_parser): parse block sequence by @vohoanglong0107 in https://github.com/biomejs/biome/pull/6727
* feat(linter): add `excludedComponents` option to `useUniqueElementIds` by @sterliakov in https://github.com/biomejs/biome/pull/6723
* ci: release by @github-actions[bot] in https://github.com/biomejs/biome/pull/6909
## New Contributors
* @darricheng made their first contribution in https://github.com/biomejs/biome/pull/6846
**Full Changelog**: https://github.com/biomejs/biome/compare/@biomejs/[email protected]...@biomejs/[email protected]