Skip to content

refactor(core): move db outside workspace#10796

Merged
ematipico merged 4 commits into
mainfrom
refactor/db-as-parameter
Jul 1, 2026
Merged

refactor(core): move db outside workspace#10796
ematipico merged 4 commits into
mainfrom
refactor/db-as-parameter

Conversation

@ematipico

@ematipico ematipico commented Jun 29, 2026

Copy link
Copy Markdown
Member

Summary

Note

I developed the changes with the help of Codex 5.5. It went through different iterations, and I changed things at different times.

Closes #10768

This PR should improve the LSP DX for certain operations, mostly analyser operations. The DX comes from the salsa-baked cancellation model, where queries are cancelled in-flight when an entry is updated and there's an existing one.

The salsa model is simple: there's a single database, and every time there's a .clone() (i.e., a read-only version), its reference count increases. Once all the read-only snapshots are released, salsa can safely update its entries, otherwise there's a deadlock. This means that there must be one single database, and it can't be shared among threads. This means that the database can't live inside the Workspace, because it is Sync and Send and our database isn't.

So now the database is kept outside of the workspace. In the CLI, we now have a new type called LocalWorkspace, which is created when the CLI runs without --use-server. It implements all the Workspace methods, and provides the current DB signature to the WorkspaceServer.

The WorkspaceServer methods have been updated to receive the new DbStorage.

DbStorage is a small abstraction over the database:

  • In the CLI, the database uses the ::Shared variant, and we always add new entries and replace the old ones. We aren't interested in updating the existing ones, because we don't need a cancellation system
  • In the LSP, the database uses the ::Owned variant, which contains parking_lot::Mutex. We use a Mutex because we need a &mut signature to update database entries, and a Mutex is the only way to obtain it. However, I believe this is fine because:
    • We update the database only when new files are updated
    • Events coming from the editor are less frequent than multiple threads like the CLI
    • We already have a debouncing mechanism for pull diagnostics

Other changes:

  • Added a small log when biome clean finishes
  • Fixed an issue where project/type-aware lint rules weren't enabled in the editor

Test Plan

Added new tests and manually tested the fixes.

Docs

N/A

@changeset-bot

changeset-bot Bot commented Jun 29, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 611f707

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 13 packages
Name Type
@biomejs/biome Patch
@biomejs/cli-win32-x64 Patch
@biomejs/cli-win32-arm64 Patch
@biomejs/cli-darwin-x64 Patch
@biomejs/cli-darwin-arm64 Patch
@biomejs/cli-linux-x64 Patch
@biomejs/cli-linux-arm64 Patch
@biomejs/cli-linux-x64-musl Patch
@biomejs/cli-linux-arm64-musl Patch
@biomejs/wasm-web Patch
@biomejs/wasm-bundler Patch
@biomejs/wasm-nodejs Patch
@biomejs/backend-jsonrpc Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@github-actions

Copy link
Copy Markdown
Contributor

✅ Organic activity

No automation signals detected in the analyzed events.

View full analysis →

This is an automated analysis by AgentScan

@github-actions github-actions Bot added A-CLI Area: CLI A-Project Area: project A-Linter Area: linter A-LSP Area: language server protocol L-JavaScript Language: JavaScript and super languages L-CSS Language: CSS and super languages L-HTML Language: HTML and super languages labels Jun 29, 2026
@codspeed-hq

codspeed-hq Bot commented Jun 29, 2026

Copy link
Copy Markdown

Merging this PR will degrade performance by 23.56%

⚡ 1 improved benchmark
❌ 2 regressed benchmarks
✅ 246 untouched benchmarks

Warning

Please fix the performance issues or acknowledge them on CodSpeed.

Performance Changes

Benchmark BASE HEAD Efficiency
deserialize_from_json_str[biome.json] 389.4 µs 852.6 µs -54.33%
synthetic/void-elements.html[uncached] 1.4 ms 1.5 ms -8.08%
uncached[simple_classes.txt] 219.3 µs 206.1 µs +6.4%

Tip

Investigate this regression by commenting @codspeedbot fix this regression on this PR, or directly use the CodSpeed MCP with your agent.


Comparing refactor/db-as-parameter (611f707) with main (6df1534)

Open in CodSpeed

@ematipico ematipico force-pushed the refactor/db-as-parameter branch from 4cfb37e to 5ce0fa0 Compare June 29, 2026 14:44
@ematipico ematipico requested review from a team June 30, 2026 07:32
@ematipico ematipico marked this pull request as ready for review June 30, 2026 07:32
@coderabbitai

coderabbitai Bot commented Jun 30, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Walkthrough

This PR refactors the Biome Language Server's workspace database access by introducing LocalWorkspace and WorkspaceServerWithDb<'a> wrappers that separate long-lived server state from Salsa DB access. DbState is restructured with a DbStorage enum supporting shared vs. owned storage modes, with DbState::lsp() for owned LSP use. WorkspaceDb gains mode-aware update APIs (Replace vs. Setters). Session now stores Arc<WorkspaceServer> and Arc<DbState>, exposing a workspace() accessor used throughout all LSP handlers. ServerFactory propagates DbState into sessions and a new catch_lsp_operation helper centralises Salsa cancellation and panic handling. JS/CSS/HTML analysers call unwind_if_revision_cancelled() in their inspect-matcher closures. The clean command now logs a console message on completion.

Possibly related PRs

  • biomejs/biome#9700: Shares the go-to-definition handler and watcher setup/test infrastructure directly affected by the LSP DbState and start_watcher refactor in this PR.
  • biomejs/biome#10315: Modifies the same module_db wiring in CSS, HTML, and JS analysers that this PR extends with unwind_if_revision_cancelled() inspect-matcher closures.
  • biomejs/biome#10608: Refactors the same DbState/workspace DB access paths in biome_service that this PR builds on top of.

Suggested labels

A-Core, A-Parser, A-Resolver, A-Tooling

Suggested reviewers

  • dyc3
  • denbezrukov
🚥 Pre-merge checks | ✅ 4
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly matches the main refactor: moving the database outside the workspace.
Description check ✅ Passed The description is directly related to the changeset and explains the refactor, LSP fix, and extra changes.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch refactor/db-as-parameter

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
crates/biome_lsp/src/requests/syntax_tree.rs (1)

26-35: 🩺 Stability & Availability | 🟡 Minor | ⚡ Quick win

Wrap syntax_tree_request with catch_lsp_operation in crates/biome_lsp/src/server.rs. This custom RPC still bypasses the cancellation handling used by the workspace methods, so a salsa::Cancelled here can surface as a panic instead of an LSP cancellation error.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@crates/biome_lsp/src/requests/syntax_tree.rs` around lines 26 - 35, Wrap the
custom RPC handled by syntax_tree_request in catch_lsp_operation from server.rs
so cancellations are converted into proper LSP cancellation errors instead of
panicking; update the request handling path around syntax_tree_request and its
call site in the server request dispatch to use the same cancellation wrapper as
the workspace methods.
🧹 Nitpick comments (3)
crates/biome_service/src/workspace/db.rs (1)

33-38: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Document why lsp() uses owned storage.

This constructor encodes the LSP cancellation/update semantics. A short rustdoc note would make the shared-vs-owned split less cryptic.

As per coding guidelines, “Use rustdoc documentation for documenting new features, rule changes, and rule/assist options in Rust code.”

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@crates/biome_service/src/workspace/db.rs` around lines 33 - 38, Add a short
rustdoc comment on the WorkspaceDb::lsp constructor explaining that it
intentionally uses DbStorage::Owned with a Mutex because the LSP path needs
isolated cancellation/update semantics, and contrast it briefly with the
shared-storage case so the owned-vs-shared split is clear to readers.

Source: Coding guidelines

crates/biome_service/src/workspace/server.rs (1)

162-166: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Complete the WorkspaceServerWithDb rustdoc.

The comment currently trails off at “A reference to”. Please describe that it borrows a WorkspaceServer plus DbState for DB-backed workspace operations.

As per coding guidelines, “Use rustdoc documentation for documenting new features, rule changes, and rule/assist options in Rust code.”

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@crates/biome_service/src/workspace/server.rs` around lines 162 - 166, The
rustdoc for WorkspaceServerWithDb is incomplete and trails off at “A reference
to”; update the documentation on the WorkspaceServerWithDb struct to clearly
describe that it borrows both a WorkspaceServer and a db::DbState for DB-backed
workspace operations. Keep the comment concise and aligned with the surrounding
rustdoc style so readers understand the role of this wrapper type immediately.

Source: Coding guidelines

crates/biome_workspace_db/src/lib.rs (1)

20-24: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Add rustdoc for the update-mode contract.

Replace vs Setters is now a public and subtle Salsa contract; please document when each mode is safe to use.

Suggested shape
+/// Controls how an existing [`ParsedSource`] is refreshed in the workspace DB.
 pub enum ParsedSourceUpdateMode {
+    /// Replaces the stored input with a new Salsa input identity.
     Replace,
+    /// Updates the existing Salsa input through setters, preserving identity.
     Setters,
 }

As per coding guidelines, “Use rustdoc documentation for documenting new features, rule changes, and rule/assist options in Rust code.”

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@crates/biome_workspace_db/src/lib.rs` around lines 20 - 24, Add rustdoc to
ParsedSourceUpdateMode so the public Salsa update-mode contract is clear.
Document in ParsedSourceUpdateMode::Replace and ParsedSourceUpdateMode::Setters
when each mode is safe to use, especially the distinction between replacing the
full parsed source versus applying setter-style updates. Keep the docs on the
enum and its variants concise but explicit so callers of ParsedSourceUpdateMode
understand the intended invariants and usage.

Source: Coding guidelines

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@crates/biome_cli/src/commands/clean.rs`:
- Around line 10-13: The clean command currently fails when the log directory is
already missing because `remove_dir_all` returns `NotFound` and the flow still
aborts; update `clean` in `commands::clean` to treat that case as harmless, then
recreate the logs directory using `create_dir_all` instead of `create_dir` so
nested paths are restored correctly. Keep the fix localized around the
`logs_path` cleanup/recreation logic and preserve the existing behavior for
other errors.

In `@crates/biome_lsp/src/server.rs`:
- Line 538: The `handle_code_action` flow in `server.rs` is re-wrapping an
already valid `Result<CodeAction, LspError>` by calling
`map_err(into_lsp_error)` on `action`, which replaces intentional handler
`LspError` values with a generic internal error. Update the `Ok(Ok(action))`
branch to return the handler’s original `LspError` unchanged, and only use
`into_lsp_error` for unexpected errors coming from the outer layers of the
request handling path.

In `@crates/biome_lsp/src/session.rs`:
- Around line 1343-1353: In session.rs, the scan kind selection logic in the
code path using ProjectScanComputer::new(...).compute() and
scan_kind_from_editor_features() reads the editor-derived scan kind twice, which
can race with a settings update and produce inconsistent branching. Cache the
result of scan_kind_from_editor_features() once before the if/else chain, then
use that single value for both the check and the returned fallback so the chosen
ScanKind stays consistent.

---

Outside diff comments:
In `@crates/biome_lsp/src/requests/syntax_tree.rs`:
- Around line 26-35: Wrap the custom RPC handled by syntax_tree_request in
catch_lsp_operation from server.rs so cancellations are converted into proper
LSP cancellation errors instead of panicking; update the request handling path
around syntax_tree_request and its call site in the server request dispatch to
use the same cancellation wrapper as the workspace methods.

---

Nitpick comments:
In `@crates/biome_service/src/workspace/db.rs`:
- Around line 33-38: Add a short rustdoc comment on the WorkspaceDb::lsp
constructor explaining that it intentionally uses DbStorage::Owned with a Mutex
because the LSP path needs isolated cancellation/update semantics, and contrast
it briefly with the shared-storage case so the owned-vs-shared split is clear to
readers.

In `@crates/biome_service/src/workspace/server.rs`:
- Around line 162-166: The rustdoc for WorkspaceServerWithDb is incomplete and
trails off at “A reference to”; update the documentation on the
WorkspaceServerWithDb struct to clearly describe that it borrows both a
WorkspaceServer and a db::DbState for DB-backed workspace operations. Keep the
comment concise and aligned with the surrounding rustdoc style so readers
understand the role of this wrapper type immediately.

In `@crates/biome_workspace_db/src/lib.rs`:
- Around line 20-24: Add rustdoc to ParsedSourceUpdateMode so the public Salsa
update-mode contract is clear. Document in ParsedSourceUpdateMode::Replace and
ParsedSourceUpdateMode::Setters when each mode is safe to use, especially the
distinction between replacing the full parsed source versus applying
setter-style updates. Keep the docs on the enum and its variants concise but
explicit so callers of ParsedSourceUpdateMode understand the intended invariants
and usage.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: b3998929-dc66-4d2d-b5d0-7bbe696d8388

📥 Commits

Reviewing files that changed from the base of the PR and between 6df1534 and 611f707.

⛔ Files ignored due to path filters (1)
  • Cargo.lock is excluded by !**/*.lock and included by **
📒 Files selected for processing (27)
  • .changeset/chubby-nails-invent.md
  • .changeset/tiny-emus-matter.md
  • crates/biome_cli/src/commands/clean.rs
  • crates/biome_cli/src/commands/daemon.rs
  • crates/biome_cli/tests/main.rs
  • crates/biome_css_analyze/src/lib.rs
  • crates/biome_html_analyze/src/lib.rs
  • crates/biome_js_analyze/src/lib.rs
  • crates/biome_lsp/Cargo.toml
  • crates/biome_lsp/src/handlers/analysis.rs
  • crates/biome_lsp/src/handlers/formatting.rs
  • crates/biome_lsp/src/handlers/navigation.rs
  • crates/biome_lsp/src/handlers/text_document.rs
  • crates/biome_lsp/src/requests/syntax_tree.rs
  • crates/biome_lsp/src/server.rs
  • crates/biome_lsp/src/server.tests.rs
  • crates/biome_lsp/src/server_goto.tests.rs
  • crates/biome_lsp/src/session.rs
  • crates/biome_lsp/src/utils.rs
  • crates/biome_service/Cargo.toml
  • crates/biome_service/src/lib.rs
  • crates/biome_service/src/test_utils.rs
  • crates/biome_service/src/workspace.rs
  • crates/biome_service/src/workspace/db.rs
  • crates/biome_service/src/workspace/server.rs
  • crates/biome_workspace_db/Cargo.toml
  • crates/biome_workspace_db/src/lib.rs

Comment on lines 10 to +13
let logs_path = biome_env()
.value_for("BIOME_LOG_PATH")
.map_or(default_biome_log_path(), Utf8PathBuf::from);
remove_dir_all(logs_path.clone()).and_then(|_| create_dir(logs_path))?;
remove_dir_all(logs_path.clone()).and_then(|_| create_dir(logs_path.clone()))?;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Handle a missing log directory gracefully.

Line 13 still bails out on NotFound, so biome clean fails on a fresh machine or after the logs folder has already been removed. Ignore that case and recreate the directory with create_dir_all instead. Tiny fix, less drama.

Possible fix
 use biome_console::{ConsoleExt, markup};
 use biome_flags::biome_env;
 use camino::Utf8PathBuf;
-use std::fs::{create_dir, remove_dir_all};
+use std::fs::{create_dir_all, remove_dir_all};
+use std::io::ErrorKind;
@@
     let logs_path = biome_env()
         .value_for("BIOME_LOG_PATH")
         .map_or(default_biome_log_path(), Utf8PathBuf::from);
-    remove_dir_all(logs_path.clone()).and_then(|_| create_dir(logs_path.clone()))?;
+    match remove_dir_all(&logs_path) {
+        Ok(()) => {}
+        Err(err) if err.kind() == ErrorKind::NotFound => {}
+        Err(err) => return Err(err.into()),
+    }
+    create_dir_all(&logs_path)?;
     let console = cli_session.app.console;
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
let logs_path = biome_env()
.value_for("BIOME_LOG_PATH")
.map_or(default_biome_log_path(), Utf8PathBuf::from);
remove_dir_all(logs_path.clone()).and_then(|_| create_dir(logs_path))?;
remove_dir_all(logs_path.clone()).and_then(|_| create_dir(logs_path.clone()))?;
let logs_path = biome_env()
.value_for("BIOME_LOG_PATH")
.map_or(default_biome_log_path(), Utf8PathBuf::from);
match remove_dir_all(&logs_path) {
Ok(()) => {}
Err(err) if err.kind() == ErrorKind::NotFound => {}
Err(err) => return Err(err.into()),
}
create_dir_all(&logs_path)?;
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@crates/biome_cli/src/commands/clean.rs` around lines 10 - 13, The clean
command currently fails when the log directory is already missing because
`remove_dir_all` returns `NotFound` and the flow still aborts; update `clean` in
`commands::clean` to treat that case as harmless, then recreate the logs
directory using `create_dir_all` instead of `create_dir` so nested paths are
restored correctly. Keep the fix localized around the `logs_path`
cleanup/recreation logic and preserve the existing behavior for other errors.

Ok(action) => Ok(action),
Err(err) => Err(into_lsp_error(err)),
},
Ok(Ok(action)) => action.map_err(into_lsp_error),

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Preserve the handler’s original LspError.

Line 538 already has a Result<CodeAction, LspError>. Running it through map_err(into_lsp_error) rewrites every intentional protocol error into a fresh internal error, so clients lose the original code/message/data.

Suggested fix
-            Ok(Ok(action)) => action.map_err(into_lsp_error),
+            Ok(Ok(action)) => action,
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
Ok(Ok(action)) => action.map_err(into_lsp_error),
Ok(Ok(action)) => action,
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@crates/biome_lsp/src/server.rs` at line 538, The `handle_code_action` flow in
`server.rs` is re-wrapping an already valid `Result<CodeAction, LspError>` by
calling `map_err(into_lsp_error)` on `action`, which replaces intentional
handler `LspError` values with a generic internal error. Update the
`Ok(Ok(action))` branch to return the handler’s original `LspError` unchanged,
and only use `into_lsp_error` for unexpected errors coming from the outer layers
of the request handling path.

Comment on lines 1343 to 1353
let scan_kind = ProjectScanComputer::new(&configuration).compute();
// We give the editor priority
let scan_kind = if !self.scan_kind_from_editor_features().is_none() {
// We give priority to the scan kind requested by the user.
let scan_kind = if scan_kind.is_project() || scan_kind.is_type_aware() {
scan_kind
} else if !self.scan_kind_from_editor_features().is_none() {
self.scan_kind_from_editor_features()
} else if scan_kind.is_none() {
ScanKind::KnownFiles
} else {
scan_kind
};

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Read the editor scan kind once.

scan_kind_from_editor_features() is called twice, so a concurrent settings update could make the branch test and returned value disagree. Cache it before the if.

Proposed fix
 let scan_kind = ProjectScanComputer::new(&configuration).compute();
+let editor_scan_kind = self.scan_kind_from_editor_features();
 // We give priority to the scan kind requested by the user.
 let scan_kind = if scan_kind.is_project() || scan_kind.is_type_aware() {
     scan_kind
-} else if !self.scan_kind_from_editor_features().is_none() {
-    self.scan_kind_from_editor_features()
+} else if !editor_scan_kind.is_none() {
+    editor_scan_kind
 } else if scan_kind.is_none() {
     ScanKind::KnownFiles
 } else {
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
let scan_kind = ProjectScanComputer::new(&configuration).compute();
// We give the editor priority
let scan_kind = if !self.scan_kind_from_editor_features().is_none() {
// We give priority to the scan kind requested by the user.
let scan_kind = if scan_kind.is_project() || scan_kind.is_type_aware() {
scan_kind
} else if !self.scan_kind_from_editor_features().is_none() {
self.scan_kind_from_editor_features()
} else if scan_kind.is_none() {
ScanKind::KnownFiles
} else {
scan_kind
};
let scan_kind = ProjectScanComputer::new(&configuration).compute();
let editor_scan_kind = self.scan_kind_from_editor_features();
// We give priority to the scan kind requested by the user.
let scan_kind = if scan_kind.is_project() || scan_kind.is_type_aware() {
scan_kind
} else if !editor_scan_kind.is_none() {
editor_scan_kind
} else if scan_kind.is_none() {
ScanKind::KnownFiles
} else {
scan_kind
};
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@crates/biome_lsp/src/session.rs` around lines 1343 - 1353, In session.rs, the
scan kind selection logic in the code path using
ProjectScanComputer::new(...).compute() and scan_kind_from_editor_features()
reads the editor-derived scan kind twice, which can race with a settings update
and produce inconsistent branching. Cache the result of
scan_kind_from_editor_features() once before the if/else chain, then use that
single value for both the check and the returned fallback so the chosen ScanKind
stays consistent.

@ematipico ematipico merged commit f1b3ab2 into main Jul 1, 2026
41 of 42 checks passed
@ematipico ematipico deleted the refactor/db-as-parameter branch July 1, 2026 07:31
@github-actions github-actions Bot mentioned this pull request Jul 1, 2026
OIRNOIR pushed a commit to OIRNOIR/YouTube-Helper-Client that referenced this pull request Jul 4, 2026
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [@biomejs/biome](https://biomejs.dev) ([source](https://github.com/biomejs/biome/tree/HEAD/packages/@biomejs/biome)) | imports | patch | [`2.5.1` -> `2.5.2`](https://renovatebot.com/diffs/npm/@biomejs%2fbiome/2.5.1/2.5.2) |

---

### Release Notes

<details>
<summary>biomejs/biome (@&#8203;biomejs/biome)</summary>

### [`v2.5.2`](https://github.com/biomejs/biome/blob/HEAD/packages/@&#8203;biomejs/biome/CHANGELOG.md#252)

[Compare Source](https://github.com/biomejs/biome/compare/@biomejs/biome@2.5.1...@biomejs/biome@2.5.2)

##### Patch Changes

- [#&#8203;10595](biomejs/biome#10595) [`f458028`](biomejs/biome@f458028) Thanks [@&#8203;pkallos](https://github.com/pkallos)! - Added the option `ignoreBooleanCoercion` to [useNullishCoalescing](https://biomejs.dev/linter/rules/use-nullish-coalescing/). When enabled, Biome ignores `||` and `||=` used inside a `Boolean()` call, where coalescing on falsy values is intentional.

- [#&#8203;10798](biomejs/biome#10798) [`4a32b63`](biomejs/biome@4a32b63) Thanks [@&#8203;pkallos](https://github.com/pkallos)! - Added the option `ignorePrimitives` to [useNullishCoalescing](https://biomejs.dev/linter/rules/use-nullish-coalescing/). When enabled, Biome ignores `||`, `||=`, and ternary expressions whose non-nullish operands are all primitives the option opts out of. Use `true` to ignore all primitives, or an object selecting `string`, `number`, `boolean`, or `bigint`.

- [#&#8203;10545](biomejs/biome#10545) [`f3d4c00`](biomejs/biome@f3d4c00) Thanks [@&#8203;Mokto](https://github.com/Mokto)! - Added the new nursery rule [`noSvelteUnnecessaryStateWrap`](https://biomejs.dev/linter/rules/no-svelte-unnecessary-state-wrap/), which reports unnecessary `$state()` wrapping of classes from `svelte/reactivity` that are already reactive.

  ```svelte
  <script>
  import { SvelteMap } from "svelte/reactivity";
  const map = $state(new SvelteMap()); // redundant
  </script>
  ```

- [#&#8203;10752](biomejs/biome#10752) [`f62fb8b`](biomejs/biome@f62fb8b) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed [#&#8203;10739](biomejs/biome#10739). Now the rule [`useValidAutocomplete`](https://biomejs.dev/linter/rules/use-valid-autocomplete/) correctly flags the `autoComplete` attribute.

- [#&#8203;10796](biomejs/biome#10796) [`f1b3ab2`](biomejs/biome@f1b3ab2) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed [#&#8203;10768](biomejs/biome#10768). Improved the performance of the Biome Language Server by cancelling certain in-flight operations when there are fast updates.

- [#&#8203;10719](biomejs/biome#10719) [`aa649b5`](biomejs/biome@aa649b5) Thanks [@&#8203;minseong0324](https://github.com/minseong0324)! - Fixed [`noMisleadingReturnType`](https://biomejs.dev/linter/rules/no-misleading-return-type/) false positive on returns that use a widening type assertion: `"a" as string` is no longer reported as misleading. The rule now also reports a literal-pinning assertion such as `false as false`, matching the existing `as const` behavior.

  ```ts
  // No longer flagged (returns are `string`):
  function getValue(b: boolean): string {
    if (b) return "a" as string;
    return "b" as string;
  }

  // Now also reported, like `as const` (returns `false`):
  function isReady(): boolean {
    return false as false;
  }
  ```

- [#&#8203;10678](biomejs/biome#10678) [`8f073a7`](biomejs/biome@8f073a7) Thanks [@&#8203;PranavAchar01](https://github.com/PranavAchar01)! - Fixed [#&#8203;7718](biomejs/biome#7718): Biome now correctly parses CSS nesting selectors when `&` appears as a trailing sub-selector after a type selector, e.g. `h1& { color: red; }`.

- [#&#8203;10756](biomejs/biome#10756) [`5ec965a`](biomejs/biome@5ec965a) Thanks [@&#8203;denbezrukov](https://github.com/denbezrukov)! - Fixed CSS formatter output for selector lists with `allowWrongLineComments` and `//` comments after a selector comma. Biome now keeps the selector before the line comment inline instead of breaking it across descendant combinators.

  ```diff
  -.powerPathNavigator
  -  .helm
  -  button.pressedButton, // pressed
  +.powerPathNavigator .helm button.pressedButton, // pressed
   .powerPathNavigator .helm button:active:not(.disabledButton) {
   }
  ```

- [#&#8203;10757](biomejs/biome#10757) [`6232fcd`](biomejs/biome@6232fcd) Thanks [@&#8203;PranavAchar01](https://github.com/PranavAchar01)! - Fixed [#&#8203;8269](biomejs/biome#8269): the CSS parser now accepts Tailwind `@variant` and `@utility` names that start with a digit, such as the `2xl` breakpoint.

  ```css
  @&#8203;utility container {
    @&#8203;variant 2xl {
      max-width: 1400px;
    }
  }
  ```

- [#&#8203;10777](biomejs/biome#10777) [`575ced6`](biomejs/biome@575ced6) Thanks [@&#8203;WaterWhisperer](https://github.com/WaterWhisperer)! - Fixed an issue reported in [#&#8203;10708](biomejs/biome#10708): the GitLab reporter now handles `--verbose` diagnostics filtering correctly.

- [#&#8203;10281](biomejs/biome#10281) [`0efe244`](biomejs/biome@0efe244) Thanks [@&#8203;Zelys-DFKH](https://github.com/Zelys-DFKH)! - Fixed a bug where GritQL patterns rejected positional (unkeyed) arguments.

- [#&#8203;10758](biomejs/biome#10758) [`e36fd8a`](biomejs/biome@e36fd8a) Thanks [@&#8203;henrybrewer00-dotcom](https://github.com/henrybrewer00-dotcom)! - Fixed [#&#8203;10697](biomejs/biome#10697): The formatter no longer removes the parentheses around an `await` or `yield` expression used as the target of a TypeScript instantiation expression. For example, `(await makeFactory)<Value>` is no longer reformatted to `await makeFactory<Value>`, which would change the meaning of the code.

- [#&#8203;10586](biomejs/biome#10586) [`3617094`](biomejs/biome@3617094) Thanks [@&#8203;IxxyDev](https://github.com/IxxyDev)! - Fixed [#&#8203;9568](biomejs/biome#9568): [`noFloatingPromises`](https://biomejs.dev/linter/rules/no-floating-promises/) no longer reports a false positive when calling an overloaded function and the selected overload does not return a promise.

  ```ts
  function bestEffort(cb: () => Promise<number>): Promise<number>;
  function bestEffort(cb: () => number): number;
  function bestEffort(
    cb: () => number | Promise<number>,
  ): Promise<number> | number {
    return cb() as Promise<number> | number;
  }

  // This resolves to the second overload, which returns `number`, so it is no
  // longer flagged as a floating promise.
  bestEffort(() => 42);
  ```

- [#&#8203;10766](biomejs/biome#10766) [`7aff4c1`](biomejs/biome@7aff4c1) Thanks [@&#8203;JamBalaya56562](https://github.com/JamBalaya56562)! - Fixed [#&#8203;2862](biomejs/biome#2862): [`noInteractiveElementToNoninteractiveRole`](https://biomejs.dev/linter/rules/no-interactive-element-to-noninteractive-role/) no longer reports custom elements (a tag name containing a dash, e.g. `<my-button role="img" />`). Per the [W3C HTML-ARIA specification](https://www.w3.org/TR/html-aria/#el-autonomous-custom-element), a custom element may be given any role or none.

- [#&#8203;10680](biomejs/biome#10680) [`771daa4`](biomejs/biome@771daa4) Thanks [@&#8203;WaterWhisperer](https://github.com/WaterWhisperer)! - Fixed [#&#8203;10635](biomejs/biome#10635): Biome now recognizes chained
  table tests such as `test.concurrent.each()` and `it.concurrent.each()` as test calls, fixing
  `noMisplacedAssertion` false positives and improving formatting for those test declarations.

- [#&#8203;10759](biomejs/biome#10759) [`34570b5`](biomejs/biome@34570b5) Thanks [@&#8203;henrybrewer00-dotcom](https://github.com/henrybrewer00-dotcom)! - Fixed [#&#8203;10636](biomejs/biome#10636): [noStaticElementInteractions](https://biomejs.dev/linter/rules/no-static-element-interactions/) no longer reports a false positive for event handlers on Svelte special elements such as `<svelte:window>`, `<svelte:document>`, and `<svelte:body>`. These are not real DOM elements, so they are now ignored by the rule.

- [#&#8203;10741](biomejs/biome#10741) [`bd2364e`](biomejs/biome@bd2364e) Thanks [@&#8203;JamBalaya56562](https://github.com/JamBalaya56562)! - Fixed [#&#8203;6686](biomejs/biome#6686): the `rage` command now respects the `--config-path` option and the `BIOME_CONFIG_PATH` environment variable when loading the Biome configuration. Previously it always used the default configuration resolution and reported the configuration as `Not set` when no `biome.json` existed in the working directory.

- [#&#8203;10763](biomejs/biome#10763) [`2c3e82d`](biomejs/biome@2c3e82d) Thanks [@&#8203;Aqu1bp](https://github.com/Aqu1bp)! - Fixed [#&#8203;10742](biomejs/biome#10742): [`noSolidDestructuredProps`](https://biomejs.dev/linter/rules/no-solid-destructured-props) now reports destructured props in Solid function components and JSX children.

- [#&#8203;10606](biomejs/biome#10606) [`a4cc4ab`](biomejs/biome@a4cc4ab) Thanks [@&#8203;Mokto](https://github.com/Mokto)! - Fixed false positives in `noUnusedImports`, `noUnusedVariables`, and `useImportType` for Svelte components that use both a `<script module>` and a `<script>` block. The two blocks compile to a single module and share a top-level scope, so a binding (import, function, or variable) declared in one block and used only in the other is no longer reported as unused.

- [#&#8203;10767](biomejs/biome#10767) [`36d5aa7`](biomejs/biome@36d5aa7) Thanks [@&#8203;otkrickey](https://github.com/otkrickey)! - Fixed [#&#8203;10754](biomejs/biome#10754): [`useVueValidVBind`](https://biomejs.dev/linter/rules/use-vue-valid-v-bind/) no longer reports the Vue 3.4+ same-name shorthand as missing a value. `:foo` and `v-bind:foo` are now accepted as equivalent to `:foo="foo"`, while `v-bind`, `v-bind:[dynamicArg]`, and `:[dynamicArg]` without a value continue to be reported.

- [#&#8203;10775](biomejs/biome#10775) [`a918af0`](biomejs/biome@a918af0) Thanks [@&#8203;WaterWhisperer](https://github.com/WaterWhisperer)! - Fixed an issue reported in [#&#8203;10708](biomejs/biome#10708): `biome rage` didn't detect running Biome daemon pipes on Windows.

- [#&#8203;10730](biomejs/biome#10730) [`5a2e65b`](biomejs/biome@5a2e65b) Thanks [@&#8203;dinocosta](https://github.com/dinocosta)! - Fixed an issue where Biome was resolving [the well-known Zed settings file](https://biomejs.dev/guides/configure-biome/#well-known-files) from the wrong location on macOS and Windows.

- [#&#8203;10807](biomejs/biome#10807) [`d97fffe`](biomejs/biome@d97fffe) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed an issue where `.scss` files were incorrectly analyzed when running `biome check`.

- [#&#8203;10672](biomejs/biome#10672) [`53c6efc`](biomejs/biome@53c6efc) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed a bug where Biome incorrectly formatted snippets that have parsing errors.

- [#&#8203;10719](biomejs/biome#10719) [`aa649b5`](biomejs/biome@aa649b5) Thanks [@&#8203;minseong0324](https://github.com/minseong0324)! - Fixed [`useAwaitThenable`](https://biomejs.dev/linter/rules/use-await-thenable/) false positive when awaiting a custom thenable that is not the global `Promise`. A value with a callable `then` member is now recognized as awaitable.

  ```ts
  interface Thenable<T> {
    then(onfulfilled: (value: T) => void): void;
  }
  declare const t: Thenable<number>;
  async function f() {
    await t;
  }
  ```

- [#&#8203;10734](biomejs/biome#10734) [`4396496`](biomejs/biome@4396496) Thanks [@&#8203;BangDori](https://github.com/BangDori)! - Fixed [#&#8203;10708](biomejs/biome#10708): `biome migrate` now preserves trivia when migrating the deprecated `recommended` option to `preset`.

- [#&#8203;10683](biomejs/biome#10683) [`ae31a00`](biomejs/biome@ae31a00) Thanks [@&#8203;Netail](https://github.com/Netail)! - Fixed [#&#8203;10657](biomejs/biome#10657) [#&#8203;10671](biomejs/biome#10671) [#&#8203;10661](biomejs/biome#10661) [#&#8203;10637](biomejs/biome#10637) [#&#8203;10718](biomejs/biome#10718): HTML rules now correctly handle dynamic attributes.

- [#&#8203;10746](biomejs/biome#10746) [`54e8239`](biomejs/biome@54e8239) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed an issue where [`noUndeclaredClasses`](https://biomejs.dev/linter/rules/no-undeclared-classes) didn't correctly detect styles defined inside the Astro directive `is:global`.

- [#&#8203;10770](biomejs/biome#10770) [`dd1429c`](biomejs/biome@dd1429c) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Improved the Biome Language Server DX by orchestrating certain operations, so that they won't block the editor during typing. This improvement is more visible in large documents.

- [#&#8203;10473](biomejs/biome#10473) [`d9b5133`](biomejs/biome@d9b5133) Thanks [@&#8203;Mokto](https://github.com/Mokto)! - Improved [`noUnusedImports`](https://biomejs.dev/linter/rules/no-unused-imports/), [`noUnusedVariables`](https://biomejs.dev/linter/rules/no-unused-variables/), [`noUnusedFunctionParameters`](https://biomejs.dev/linter/rules/no-unused-function-parameters/), and [`useImportType`](https://biomejs.dev/linter/rules/use-import-type/) for Svelte, Vue, and Astro files (with `html.experimentalFullSupportEnabled`). Bindings used only in the template — including component tags, attribute interpolations, directives, `bind:` shorthand, and snippet parameters — are no longer reported as unused, while genuinely unused ones still are.

- [#&#8203;10796](biomejs/biome#10796) [`f1b3ab2`](biomejs/biome@f1b3ab2) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed an issue where the Biome Language Server didn't enable project or type-aware lint rules, even when they were explicitly enabled.

- [#&#8203;10746](biomejs/biome#10746) [`54e8239`](biomejs/biome@54e8239) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed an issue where [`noUndeclaredClasses`](https://biomejs.dev/linter/rules/no-undeclared-classes) didn't detect styles declared inside HTML documents.

- [#&#8203;10774](biomejs/biome#10774) [`bde945b`](biomejs/biome@bde945b) Thanks [@&#8203;pattrickrice](https://github.com/pattrickrice)! - Fixed [#&#8203;10268](biomejs/biome#10268) where a race condition resulted in internal errors such as: `The file biome.json does not exist in the workspace`.

</details>

---

### Configuration

📅 **Schedule**: (UTC)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Mend Renovate](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yMzQuMCIsInVwZGF0ZWRJblZlciI6IjQzLjIzNC4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

Reviewed-on: https://git.oirnoir.dev/OIRNOIR/YouTube-Helper-Client/pulls/9
OIRNOIR pushed a commit to OIRNOIR/YouTube-Helper-Server that referenced this pull request Jul 8, 2026
This PR contains the following updates:

| Package | Type | Update | Change | Pending |
|---|---|---|---|---|
| [@biomejs/biome](https://biomejs.dev) ([source](https://github.com/biomejs/biome/tree/HEAD/packages/@biomejs/biome)) | imports | patch | [`2.5.1` -> `2.5.2`](https://renovatebot.com/diffs/npm/@biomejs%2fbiome/2.5.1/2.5.2) | `2.5.3` |

---

### Release Notes

<details>
<summary>biomejs/biome (@&#8203;biomejs/biome)</summary>

### [`v2.5.2`](https://github.com/biomejs/biome/blob/HEAD/packages/@&#8203;biomejs/biome/CHANGELOG.md#252)

[Compare Source](https://github.com/biomejs/biome/compare/@biomejs/biome@2.5.1...@biomejs/biome@2.5.2)

##### Patch Changes

- [#&#8203;10595](biomejs/biome#10595) [`f458028`](biomejs/biome@f458028) Thanks [@&#8203;pkallos](https://github.com/pkallos)! - Added the option `ignoreBooleanCoercion` to [useNullishCoalescing](https://biomejs.dev/linter/rules/use-nullish-coalescing/). When enabled, Biome ignores `||` and `||=` used inside a `Boolean()` call, where coalescing on falsy values is intentional.

- [#&#8203;10798](biomejs/biome#10798) [`4a32b63`](biomejs/biome@4a32b63) Thanks [@&#8203;pkallos](https://github.com/pkallos)! - Added the option `ignorePrimitives` to [useNullishCoalescing](https://biomejs.dev/linter/rules/use-nullish-coalescing/). When enabled, Biome ignores `||`, `||=`, and ternary expressions whose non-nullish operands are all primitives the option opts out of. Use `true` to ignore all primitives, or an object selecting `string`, `number`, `boolean`, or `bigint`.

- [#&#8203;10545](biomejs/biome#10545) [`f3d4c00`](biomejs/biome@f3d4c00) Thanks [@&#8203;Mokto](https://github.com/Mokto)! - Added the new nursery rule [`noSvelteUnnecessaryStateWrap`](https://biomejs.dev/linter/rules/no-svelte-unnecessary-state-wrap/), which reports unnecessary `$state()` wrapping of classes from `svelte/reactivity` that are already reactive.

  ```svelte
  <script>
  import { SvelteMap } from "svelte/reactivity";
  const map = $state(new SvelteMap()); // redundant
  </script>
  ```

- [#&#8203;10752](biomejs/biome#10752) [`f62fb8b`](biomejs/biome@f62fb8b) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed [#&#8203;10739](biomejs/biome#10739). Now the rule [`useValidAutocomplete`](https://biomejs.dev/linter/rules/use-valid-autocomplete/) correctly flags the `autoComplete` attribute.

- [#&#8203;10796](biomejs/biome#10796) [`f1b3ab2`](biomejs/biome@f1b3ab2) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed [#&#8203;10768](biomejs/biome#10768). Improved the performance of the Biome Language Server by cancelling certain in-flight operations when there are fast updates.

- [#&#8203;10719](biomejs/biome#10719) [`aa649b5`](biomejs/biome@aa649b5) Thanks [@&#8203;minseong0324](https://github.com/minseong0324)! - Fixed [`noMisleadingReturnType`](https://biomejs.dev/linter/rules/no-misleading-return-type/) false positive on returns that use a widening type assertion: `"a" as string` is no longer reported as misleading. The rule now also reports a literal-pinning assertion such as `false as false`, matching the existing `as const` behavior.

  ```ts
  // No longer flagged (returns are `string`):
  function getValue(b: boolean): string {
    if (b) return "a" as string;
    return "b" as string;
  }

  // Now also reported, like `as const` (returns `false`):
  function isReady(): boolean {
    return false as false;
  }
  ```

- [#&#8203;10678](biomejs/biome#10678) [`8f073a7`](biomejs/biome@8f073a7) Thanks [@&#8203;PranavAchar01](https://github.com/PranavAchar01)! - Fixed [#&#8203;7718](biomejs/biome#7718): Biome now correctly parses CSS nesting selectors when `&` appears as a trailing sub-selector after a type selector, e.g. `h1& { color: red; }`.

- [#&#8203;10756](biomejs/biome#10756) [`5ec965a`](biomejs/biome@5ec965a) Thanks [@&#8203;denbezrukov](https://github.com/denbezrukov)! - Fixed CSS formatter output for selector lists with `allowWrongLineComments` and `//` comments after a selector comma. Biome now keeps the selector before the line comment inline instead of breaking it across descendant combinators.

  ```diff
  -.powerPathNavigator
  -  .helm
  -  button.pressedButton, // pressed
  +.powerPathNavigator .helm button.pressedButton, // pressed
   .powerPathNavigator .helm button:active:not(.disabledButton) {
   }
  ```

- [#&#8203;10757](biomejs/biome#10757) [`6232fcd`](biomejs/biome@6232fcd) Thanks [@&#8203;PranavAchar01](https://github.com/PranavAchar01)! - Fixed [#&#8203;8269](biomejs/biome#8269): the CSS parser now accepts Tailwind `@variant` and `@utility` names that start with a digit, such as the `2xl` breakpoint.

  ```css
  @&#8203;utility container {
    @&#8203;variant 2xl {
      max-width: 1400px;
    }
  }
  ```

- [#&#8203;10777](biomejs/biome#10777) [`575ced6`](biomejs/biome@575ced6) Thanks [@&#8203;WaterWhisperer](https://github.com/WaterWhisperer)! - Fixed an issue reported in [#&#8203;10708](biomejs/biome#10708): the GitLab reporter now handles `--verbose` diagnostics filtering correctly.

- [#&#8203;10281](biomejs/biome#10281) [`0efe244`](biomejs/biome@0efe244) Thanks [@&#8203;Zelys-DFKH](https://github.com/Zelys-DFKH)! - Fixed a bug where GritQL patterns rejected positional (unkeyed) arguments.

- [#&#8203;10758](biomejs/biome#10758) [`e36fd8a`](biomejs/biome@e36fd8a) Thanks [@&#8203;henrybrewer00-dotcom](https://github.com/henrybrewer00-dotcom)! - Fixed [#&#8203;10697](biomejs/biome#10697): The formatter no longer removes the parentheses around an `await` or `yield` expression used as the target of a TypeScript instantiation expression. For example, `(await makeFactory)<Value>` is no longer reformatted to `await makeFactory<Value>`, which would change the meaning of the code.

- [#&#8203;10586](biomejs/biome#10586) [`3617094`](biomejs/biome@3617094) Thanks [@&#8203;IxxyDev](https://github.com/IxxyDev)! - Fixed [#&#8203;9568](biomejs/biome#9568): [`noFloatingPromises`](https://biomejs.dev/linter/rules/no-floating-promises/) no longer reports a false positive when calling an overloaded function and the selected overload does not return a promise.

  ```ts
  function bestEffort(cb: () => Promise<number>): Promise<number>;
  function bestEffort(cb: () => number): number;
  function bestEffort(
    cb: () => number | Promise<number>,
  ): Promise<number> | number {
    return cb() as Promise<number> | number;
  }

  // This resolves to the second overload, which returns `number`, so it is no
  // longer flagged as a floating promise.
  bestEffort(() => 42);
  ```

- [#&#8203;10766](biomejs/biome#10766) [`7aff4c1`](biomejs/biome@7aff4c1) Thanks [@&#8203;JamBalaya56562](https://github.com/JamBalaya56562)! - Fixed [#&#8203;2862](biomejs/biome#2862): [`noInteractiveElementToNoninteractiveRole`](https://biomejs.dev/linter/rules/no-interactive-element-to-noninteractive-role/) no longer reports custom elements (a tag name containing a dash, e.g. `<my-button role="img" />`). Per the [W3C HTML-ARIA specification](https://www.w3.org/TR/html-aria/#el-autonomous-custom-element), a custom element may be given any role or none.

- [#&#8203;10680](biomejs/biome#10680) [`771daa4`](biomejs/biome@771daa4) Thanks [@&#8203;WaterWhisperer](https://github.com/WaterWhisperer)! - Fixed [#&#8203;10635](biomejs/biome#10635): Biome now recognizes chained
  table tests such as `test.concurrent.each()` and `it.concurrent.each()` as test calls, fixing
  `noMisplacedAssertion` false positives and improving formatting for those test declarations.

- [#&#8203;10759](biomejs/biome#10759) [`34570b5`](biomejs/biome@34570b5) Thanks [@&#8203;henrybrewer00-dotcom](https://github.com/henrybrewer00-dotcom)! - Fixed [#&#8203;10636](biomejs/biome#10636): [noStaticElementInteractions](https://biomejs.dev/linter/rules/no-static-element-interactions/) no longer reports a false positive for event handlers on Svelte special elements such as `<svelte:window>`, `<svelte:document>`, and `<svelte:body>`. These are not real DOM elements, so they are now ignored by the rule.

- [#&#8203;10741](biomejs/biome#10741) [`bd2364e`](biomejs/biome@bd2364e) Thanks [@&#8203;JamBalaya56562](https://github.com/JamBalaya56562)! - Fixed [#&#8203;6686](biomejs/biome#6686): the `rage` command now respects the `--config-path` option and the `BIOME_CONFIG_PATH` environment variable when loading the Biome configuration. Previously it always used the default configuration resolution and reported the configuration as `Not set` when no `biome.json` existed in the working directory.

- [#&#8203;10763](biomejs/biome#10763) [`2c3e82d`](biomejs/biome@2c3e82d) Thanks [@&#8203;Aqu1bp](https://github.com/Aqu1bp)! - Fixed [#&#8203;10742](biomejs/biome#10742): [`noSolidDestructuredProps`](https://biomejs.dev/linter/rules/no-solid-destructured-props) now reports destructured props in Solid function components and JSX children.

- [#&#8203;10606](biomejs/biome#10606) [`a4cc4ab`](biomejs/biome@a4cc4ab) Thanks [@&#8203;Mokto](https://github.com/Mokto)! - Fixed false positives in `noUnusedImports`, `noUnusedVariables`, and `useImportType` for Svelte components that use both a `<script module>` and a `<script>` block. The two blocks compile to a single module and share a top-level scope, so a binding (import, function, or variable) declared in one block and used only in the other is no longer reported as unused.

- [#&#8203;10767](biomejs/biome#10767) [`36d5aa7`](biomejs/biome@36d5aa7) Thanks [@&#8203;otkrickey](https://github.com/otkrickey)! - Fixed [#&#8203;10754](biomejs/biome#10754): [`useVueValidVBind`](https://biomejs.dev/linter/rules/use-vue-valid-v-bind/) no longer reports the Vue 3.4+ same-name shorthand as missing a value. `:foo` and `v-bind:foo` are now accepted as equivalent to `:foo="foo"`, while `v-bind`, `v-bind:[dynamicArg]`, and `:[dynamicArg]` without a value continue to be reported.

- [#&#8203;10775](biomejs/biome#10775) [`a918af0`](biomejs/biome@a918af0) Thanks [@&#8203;WaterWhisperer](https://github.com/WaterWhisperer)! - Fixed an issue reported in [#&#8203;10708](biomejs/biome#10708): `biome rage` didn't detect running Biome daemon pipes on Windows.

- [#&#8203;10730](biomejs/biome#10730) [`5a2e65b`](biomejs/biome@5a2e65b) Thanks [@&#8203;dinocosta](https://github.com/dinocosta)! - Fixed an issue where Biome was resolving [the well-known Zed settings file](https://biomejs.dev/guides/configure-biome/#well-known-files) from the wrong location on macOS and Windows.

- [#&#8203;10807](biomejs/biome#10807) [`d97fffe`](biomejs/biome@d97fffe) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed an issue where `.scss` files were incorrectly analyzed when running `biome check`.

- [#&#8203;10672](biomejs/biome#10672) [`53c6efc`](biomejs/biome@53c6efc) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed a bug where Biome incorrectly formatted snippets that have parsing errors.

- [#&#8203;10719](biomejs/biome#10719) [`aa649b5`](biomejs/biome@aa649b5) Thanks [@&#8203;minseong0324](https://github.com/minseong0324)! - Fixed [`useAwaitThenable`](https://biomejs.dev/linter/rules/use-await-thenable/) false positive when awaiting a custom thenable that is not the global `Promise`. A value with a callable `then` member is now recognized as awaitable.

  ```ts
  interface Thenable<T> {
    then(onfulfilled: (value: T) => void): void;
  }
  declare const t: Thenable<number>;
  async function f() {
    await t;
  }
  ```

- [#&#8203;10734](biomejs/biome#10734) [`4396496`](biomejs/biome@4396496) Thanks [@&#8203;BangDori](https://github.com/BangDori)! - Fixed [#&#8203;10708](biomejs/biome#10708): `biome migrate` now preserves trivia when migrating the deprecated `recommended` option to `preset`.

- [#&#8203;10683](biomejs/biome#10683) [`ae31a00`](biomejs/biome@ae31a00) Thanks [@&#8203;Netail](https://github.com/Netail)! - Fixed [#&#8203;10657](biomejs/biome#10657) [#&#8203;10671](biomejs/biome#10671) [#&#8203;10661](biomejs/biome#10661) [#&#8203;10637](biomejs/biome#10637) [#&#8203;10718](biomejs/biome#10718): HTML rules now correctly handle dynamic attributes.

- [#&#8203;10746](biomejs/biome#10746) [`54e8239`](biomejs/biome@54e8239) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed an issue where [`noUndeclaredClasses`](https://biomejs.dev/linter/rules/no-undeclared-classes) didn't correctly detect styles defined inside the Astro directive `is:global`.

- [#&#8203;10770](biomejs/biome#10770) [`dd1429c`](biomejs/biome@dd1429c) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Improved the Biome Language Server DX by orchestrating certain operations, so that they won't block the editor during typing. This improvement is more visible in large documents.

- [#&#8203;10473](biomejs/biome#10473) [`d9b5133`](biomejs/biome@d9b5133) Thanks [@&#8203;Mokto](https://github.com/Mokto)! - Improved [`noUnusedImports`](https://biomejs.dev/linter/rules/no-unused-imports/), [`noUnusedVariables`](https://biomejs.dev/linter/rules/no-unused-variables/), [`noUnusedFunctionParameters`](https://biomejs.dev/linter/rules/no-unused-function-parameters/), and [`useImportType`](https://biomejs.dev/linter/rules/use-import-type/) for Svelte, Vue, and Astro files (with `html.experimentalFullSupportEnabled`). Bindings used only in the template — including component tags, attribute interpolations, directives, `bind:` shorthand, and snippet parameters — are no longer reported as unused, while genuinely unused ones still are.

- [#&#8203;10796](biomejs/biome#10796) [`f1b3ab2`](biomejs/biome@f1b3ab2) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed an issue where the Biome Language Server didn't enable project or type-aware lint rules, even when they were explicitly enabled.

- [#&#8203;10746](biomejs/biome#10746) [`54e8239`](biomejs/biome@54e8239) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed an issue where [`noUndeclaredClasses`](https://biomejs.dev/linter/rules/no-undeclared-classes) didn't detect styles declared inside HTML documents.

- [#&#8203;10774](biomejs/biome#10774) [`bde945b`](biomejs/biome@bde945b) Thanks [@&#8203;pattrickrice](https://github.com/pattrickrice)! - Fixed [#&#8203;10268](biomejs/biome#10268) where a race condition resulted in internal errors such as: `The file biome.json does not exist in the workspace`.

</details>

---

### Configuration

📅 **Schedule**: (UTC)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Mend Renovate](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yNDYuMSIsInVwZGF0ZWRJblZlciI6IjQzLjI0Ni4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

Reviewed-on: https://git.oirnoir.dev/OIRNOIR/YouTube-Helper-Server/pulls/22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-CLI Area: CLI A-Linter Area: linter A-LSP Area: language server protocol A-Project Area: project L-CSS Language: CSS and super languages L-HTML Language: HTML and super languages L-JavaScript Language: JavaScript and super languages

Projects

None yet

Development

Successfully merging this pull request may close these issues.

🐛 Red lines out of sync with code, biome LSP just gives up, no clear logs to say why!

1 participant