Merge pull request #19716 from Veykril/push-wmmvswskoktw

Update salsa
This commit is contained in:
Lukas Wirth 2025-04-29 17:54:36 +00:00 committed by GitHub
commit 78a488dd5e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
30 changed files with 137 additions and 80 deletions

18
Cargo.lock generated
View File

@ -85,6 +85,7 @@ dependencies = [
"query-group-macro",
"rustc-hash 2.1.1",
"salsa",
"salsa-macros",
"semver",
"span",
"syntax",
@ -630,6 +631,7 @@ dependencies = [
"rustc-hash 2.1.1",
"rustc_apfloat",
"salsa",
"salsa-macros",
"smallvec",
"span",
"stdx",
@ -660,6 +662,7 @@ dependencies = [
"query-group-macro",
"rustc-hash 2.1.1",
"salsa",
"salsa-macros",
"smallvec",
"span",
"stdx",
@ -700,6 +703,7 @@ dependencies = [
"rustc-hash 2.1.1",
"rustc_apfloat",
"salsa",
"salsa-macros",
"scoped-tls",
"smallvec",
"span",
@ -936,6 +940,7 @@ dependencies = [
"rayon",
"rustc-hash 2.1.1",
"salsa",
"salsa-macros",
"span",
"stdx",
"syntax",
@ -1729,6 +1734,7 @@ dependencies = [
"proc-macro2",
"quote",
"salsa",
"salsa-macros",
"syn",
]
@ -2033,9 +2039,9 @@ checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f"
[[package]]
name = "salsa"
version = "0.20.0"
version = "0.21.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1be22155f8d9732518b2db2bf379fe6f0b2375e76b08b7c8fe6c1b887d548c24"
checksum = "4deeb38b4c80ac90a8d4796f83da941b0d76c23783550d15d37eb43ccddcb5bc"
dependencies = [
"boxcar",
"crossbeam-queue",
@ -2056,15 +2062,15 @@ dependencies = [
[[package]]
name = "salsa-macro-rules"
version = "0.20.0"
version = "0.21.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f55a7ef0a84e336f7c5f0332d81727f5629fe042d2aa556c75307afebc9f78a5"
checksum = "a4e6166fa2802d86a77dbcae1bfe75f0ac46fdf952660c233ed64855a53dd603"
[[package]]
name = "salsa-macros"
version = "0.20.0"
version = "0.21.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8d0e88a9c0c0d231a63f83dcd1a2c5e5d11044fac4b65bc9ad3b68ab48b0a0ab"
checksum = "bf358e645a835d9901ee4d812d9812266e046ee92a28d2e37a73b7169a6503b7"
dependencies = [
"heck",
"proc-macro2",

View File

@ -131,7 +131,8 @@ process-wrap = { version = "8.2.0", features = ["std"] }
pulldown-cmark-to-cmark = "10.0.4"
pulldown-cmark = { version = "0.9.6", default-features = false }
rayon = "1.10.0"
salsa = "0.20.0"
salsa = { version = "0.21.0", default-features = false, features = ["rayon","salsa_unstable"] }
salsa-macros = "0.21.0"
semver = "1.0.26"
serde = { version = "1.0.219" }
serde_derive = { version = "1.0.219" }

View File

@ -15,6 +15,7 @@ rust-version.workspace = true
la-arena.workspace = true
dashmap.workspace = true
salsa.workspace = true
salsa-macros.workspace = true
query-group.workspace = true
rustc-hash.workspace = true
triomphe.workspace = true

View File

@ -392,7 +392,7 @@ impl BuiltDependency {
pub type CratesIdMap = FxHashMap<CrateBuilderId, Crate>;
#[salsa::input]
#[salsa_macros::input]
#[derive(Debug)]
pub struct Crate {
#[return_ref]

View File

@ -1,9 +1,13 @@
//! base_db defines basic database traits. The concrete DB is defined by ide.
pub use salsa;
pub use salsa_macros;
// FIXME: Rename this crate, base db is non descriptive
mod change;
mod input;
use std::hash::BuildHasherDefault;
use std::{cell::RefCell, hash::BuildHasherDefault, panic, sync::Once};
pub use crate::{
change::FileChange,
@ -17,7 +21,6 @@ pub use crate::{
use dashmap::{DashMap, mapref::entry::Entry};
pub use query_group::{self};
use rustc_hash::{FxHashSet, FxHasher};
pub use salsa::{self};
use salsa::{Durability, Setter};
pub use semver::{BuildMetadata, Prerelease, Version, VersionReq};
use span::Edition;
@ -28,7 +31,7 @@ pub use vfs::{AnchoredPath, AnchoredPathBuf, FileId, VfsPath, file_set::FileSet}
#[macro_export]
macro_rules! impl_intern_key {
($id:ident, $loc:ident) => {
#[salsa::interned(no_lifetime)]
#[salsa_macros::interned(no_lifetime)]
pub struct $id {
pub loc: $loc,
}
@ -60,7 +63,7 @@ impl Files {
match self.files.get(&file_id) {
Some(text) => *text,
None => {
panic!("Unable to fetch file text for `vfs::FileId`: {:?}; this is a bug", file_id)
panic!("Unable to fetch file text for `vfs::FileId`: {file_id:?}; this is a bug")
}
}
}
@ -101,8 +104,7 @@ impl Files {
let source_root = match self.source_roots.get(&source_root_id) {
Some(source_root) => source_root,
None => panic!(
"Unable to fetch `SourceRootInput` with `SourceRootId` ({:?}); this is a bug",
source_root_id
"Unable to fetch `SourceRootInput` with `SourceRootId` ({source_root_id:?}); this is a bug"
),
};
@ -132,8 +134,7 @@ impl Files {
let file_source_root = match self.file_source_roots.get(&id) {
Some(file_source_root) => file_source_root,
None => panic!(
"Unable to get `FileSourceRootInput` with `vfs::FileId` ({:?}); this is a bug",
id
"Unable to get `FileSourceRootInput` with `vfs::FileId` ({id:?}); this is a bug",
),
};
*file_source_root
@ -163,7 +164,7 @@ impl Files {
}
}
#[salsa::interned(no_lifetime, debug, constructor=from_span)]
#[salsa_macros::interned(no_lifetime, debug, constructor=from_span)]
pub struct EditionedFileId {
pub editioned_file_id: span::EditionedFileId,
}
@ -198,18 +199,18 @@ impl EditionedFileId {
}
}
#[salsa::input(debug)]
#[salsa_macros::input(debug)]
pub struct FileText {
pub text: Arc<str>,
pub file_id: vfs::FileId,
}
#[salsa::input(debug)]
#[salsa_macros::input(debug)]
pub struct FileSourceRootInput {
pub source_root_id: SourceRootId,
}
#[salsa::input(debug)]
#[salsa_macros::input(debug)]
pub struct SourceRootInput {
pub source_root: Arc<SourceRoot>,
}
@ -276,7 +277,7 @@ pub fn transitive_deps(db: &dyn SourceDatabase, crate_id: Crate) -> FxHashSet<Cr
deps
}
#[salsa::db]
#[salsa_macros::db]
pub trait SourceDatabase: salsa::Database {
/// Text of the file.
fn file_text(&self, file_id: vfs::FileId) -> FileText;
@ -355,7 +356,7 @@ fn parse(db: &dyn RootQueryDb, file_id: EditionedFileId) -> Parse<ast::SourceFil
}
fn parse_errors(db: &dyn RootQueryDb, file_id: EditionedFileId) -> Option<&[SyntaxError]> {
#[salsa::tracked(return_ref)]
#[salsa_macros::tracked(return_ref)]
fn parse_errors(db: &dyn RootQueryDb, file_id: EditionedFileId) -> Option<Box<[SyntaxError]>> {
let errors = db.parse(file_id).errors();
match &*errors {
@ -384,3 +385,51 @@ fn relevant_crates(db: &dyn RootQueryDb, file_id: FileId) -> Arc<[Crate]> {
let source_root = db.file_source_root(file_id);
db.source_root_crates(source_root.source_root_id(db))
}
#[must_use]
pub struct DbPanicContext {
// prevent arbitrary construction
_priv: (),
}
impl Drop for DbPanicContext {
fn drop(&mut self) {
Self::with_ctx(|ctx| assert!(ctx.pop().is_some()));
}
}
impl DbPanicContext {
pub fn enter(frame: String) -> DbPanicContext {
#[expect(clippy::print_stderr, reason = "already panicking anyway")]
fn set_hook() {
let default_hook = panic::take_hook();
panic::set_hook(Box::new(move |panic_info| {
DbPanicContext::with_ctx(|ctx| {
if !ctx.is_empty() {
eprintln!("Panic context:");
for frame in ctx.iter() {
eprintln!("> {frame}\n");
}
}
});
if let Some(backtrace) = salsa::Backtrace::capture() {
eprintln!("{backtrace}");
}
default_hook(panic_info);
}));
}
static SET_HOOK: Once = Once::new();
SET_HOOK.call_once(set_hook);
Self::with_ctx(|ctx| ctx.push(frame));
DbPanicContext { _priv: () }
}
fn with_ctx(f: impl FnOnce(&mut Vec<String>)) {
thread_local! {
static CTX: RefCell<Vec<String>> = const { RefCell::new(Vec::new()) };
}
CTX.with(|ctx| f(&mut ctx.borrow_mut()));
}
}

View File

@ -28,6 +28,7 @@ triomphe.workspace = true
rustc_apfloat = "0.2.2"
text-size.workspace = true
salsa.workspace = true
salsa-macros.workspace = true
query-group.workspace = true
ra-ap-rustc_parse_format.workspace = true

View File

@ -84,7 +84,7 @@ impl LangItemTarget {
}
/// Salsa query. This will look for lang items in a specific crate.
#[salsa::tracked(return_ref)]
#[salsa_macros::tracked(return_ref)]
pub fn crate_lang_items(db: &dyn DefDatabase, krate: Crate) -> Option<Box<LangItems>> {
let _p = tracing::info_span!("crate_lang_items_query").entered();
@ -153,7 +153,7 @@ pub fn crate_lang_items(db: &dyn DefDatabase, krate: Crate) -> Option<Box<LangIt
/// Salsa query. Look for a lang item, starting from the specified crate and recursively
/// traversing its dependencies.
#[salsa::tracked]
#[salsa_macros::tracked]
pub fn lang_item(
db: &dyn DefDatabase,
start_crate: Crate,

View File

@ -554,7 +554,7 @@ pub enum ItemContainerId {
impl_from!(ModuleId for ItemContainerId);
/// A Data Type
#[derive(Debug, PartialOrd, Ord, Clone, Copy, PartialEq, Eq, Hash, salsa::Supertype)]
#[derive(Debug, PartialOrd, Ord, Clone, Copy, PartialEq, Eq, Hash, salsa_macros::Supertype)]
pub enum AdtId {
StructId(StructId),
UnionId(UnionId),
@ -563,7 +563,7 @@ pub enum AdtId {
impl_from!(StructId, UnionId, EnumId for AdtId);
/// A macro
#[derive(Debug, PartialOrd, Ord, Clone, Copy, PartialEq, Eq, Hash, salsa::Supertype)]
#[derive(Debug, PartialOrd, Ord, Clone, Copy, PartialEq, Eq, Hash, salsa_macros::Supertype)]
pub enum MacroId {
Macro2Id(Macro2Id),
MacroRulesId(MacroRulesId),
@ -619,7 +619,7 @@ impl_from!(
/// A constant, which might appears as a const item, an anonymous const block in expressions
/// or patterns, or as a constant in types with const generics.
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, salsa::Supertype)]
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, salsa_macros::Supertype)]
pub enum GeneralConstId {
ConstId(ConstId),
StaticId(StaticId),
@ -656,7 +656,7 @@ impl GeneralConstId {
}
/// The defs which have a body (have root expressions for type inference).
#[derive(Debug, PartialOrd, Ord, Clone, Copy, PartialEq, Eq, Hash, salsa::Supertype)]
#[derive(Debug, PartialOrd, Ord, Clone, Copy, PartialEq, Eq, Hash, salsa_macros::Supertype)]
pub enum DefWithBodyId {
FunctionId(FunctionId),
StaticId(StaticId),
@ -701,7 +701,7 @@ pub enum AssocItemId {
// casting them, and somehow making the constructors private, which would be annoying.
impl_from!(FunctionId, ConstId, TypeAliasId for AssocItemId);
#[derive(Debug, PartialOrd, Ord, Clone, Copy, PartialEq, Eq, Hash, salsa::Supertype)]
#[derive(Debug, PartialOrd, Ord, Clone, Copy, PartialEq, Eq, Hash, salsa_macros::Supertype)]
pub enum GenericDefId {
AdtId(AdtId),
// consts can have type parameters from their parents (i.e. associated consts of traits)
@ -790,7 +790,7 @@ impl From<AssocItemId> for GenericDefId {
}
}
#[derive(Debug, PartialOrd, Ord, Clone, Copy, PartialEq, Eq, Hash, salsa::Supertype)]
#[derive(Debug, PartialOrd, Ord, Clone, Copy, PartialEq, Eq, Hash, salsa_macros::Supertype)]
pub enum CallableDefId {
FunctionId(FunctionId),
StructId(StructId),
@ -906,7 +906,7 @@ impl From<VariantId> for AttrDefId {
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, salsa::Supertype)]
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, salsa_macros::Supertype)]
pub enum VariantId {
EnumVariantId(EnumVariantId),
StructId(StructId),

View File

@ -19,7 +19,7 @@ use crate::{
src::HasSource,
};
#[salsa::db]
#[salsa_macros::db]
#[derive(Clone)]
pub(crate) struct TestDB {
storage: salsa::Storage<Self>,
@ -44,7 +44,7 @@ impl Default for TestDB {
}
}
#[salsa::db]
#[salsa_macros::db]
impl salsa::Database for TestDB {
fn salsa_event(&self, event: &dyn std::ops::Fn() -> salsa::Event) {
let mut events = self.events.lock().unwrap();
@ -63,7 +63,7 @@ impl fmt::Debug for TestDB {
impl panic::RefUnwindSafe for TestDB {}
#[salsa::db]
#[salsa_macros::db]
impl SourceDatabase for TestDB {
fn file_text(&self, file_id: base_db::FileId) -> FileText {
self.files.file_text(file_id)

View File

@ -21,6 +21,7 @@ smallvec.workspace = true
triomphe.workspace = true
query-group.workspace = true
salsa.workspace = true
salsa-macros.workspace = true
# local deps
stdx.workspace = true

View File

@ -1,7 +1,6 @@
//! Defines a unit of change that can applied to the database to get the next
//! state. Changes are transactional.
use base_db::{CrateGraphBuilder, FileChange, SourceRoot};
use salsa::Durability;
use base_db::{CrateGraphBuilder, FileChange, SourceRoot, salsa::Durability};
use span::FileId;
use triomphe::Arc;

View File

@ -144,7 +144,7 @@ pub trait ExpandDatabase: RootQueryDb {
fn syntax_context(&self, file: HirFileId, edition: Edition) -> SyntaxContext;
}
#[salsa::interned(no_lifetime, id = span::SyntaxContext)]
#[salsa_macros::interned(no_lifetime, id = span::SyntaxContext)]
pub struct SyntaxContextWrapper {
pub data: SyntaxContext,
}

View File

@ -1050,7 +1050,7 @@ impl ExpandTo {
intern::impl_internable!(ModPath, attrs::AttrInput);
#[salsa::interned(no_lifetime, debug)]
#[salsa_macros::interned(no_lifetime, debug)]
#[doc(alias = "MacroFileId")]
pub struct MacroCallId {
pub loc: MacroCallLoc,
@ -1070,7 +1070,7 @@ impl From<MacroCallId> for span::MacroCallId {
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, salsa::Supertype)]
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, salsa_macros::Supertype)]
pub enum HirFileId {
FileId(EditionedFileId),
MacroFile(MacroCallId),

View File

@ -34,6 +34,7 @@ indexmap.workspace = true
rustc_apfloat = "0.2.2"
query-group.workspace = true
salsa.workspace = true
salsa-macros.workspace = true
ra-ap-rustc_abi.workspace = true
ra-ap-rustc_index.workspace = true

View File

@ -1468,7 +1468,7 @@ fn type_for_enum_variant_constructor(
}
}
#[salsa::tracked(cycle_result = type_for_adt_cycle_result)]
#[salsa_macros::tracked(cycle_result = type_for_adt_cycle_result)]
fn type_for_adt_tracked(db: &dyn HirDatabase, adt: AdtId) -> Binders<Ty> {
type_for_adt(db, adt)
}
@ -1533,7 +1533,7 @@ pub enum TyDefId {
}
impl_from!(BuiltinType, AdtId(StructId, EnumId, UnionId), TypeAliasId for TyDefId);
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, salsa::Supertype)]
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, salsa_macros::Supertype)]
pub enum ValueTyDefId {
FunctionId(FunctionId),
StructId(StructId),

View File

@ -16,7 +16,7 @@ use syntax::TextRange;
use test_utils::extract_annotations;
use triomphe::Arc;
#[salsa::db]
#[salsa_macros::db]
#[derive(Clone)]
pub(crate) struct TestDB {
storage: salsa::Storage<Self>,
@ -47,7 +47,7 @@ impl fmt::Debug for TestDB {
}
}
#[salsa::db]
#[salsa_macros::db]
impl SourceDatabase for TestDB {
fn file_text(&self, file_id: base_db::FileId) -> FileText {
self.files.file_text(file_id)
@ -102,7 +102,7 @@ impl SourceDatabase for TestDB {
}
}
#[salsa::db]
#[salsa_macros::db]
impl salsa::Database for TestDB {
fn salsa_event(&self, event: &dyn std::ops::Fn() -> salsa::Event) {
let mut events = self.events.lock().unwrap();

View File

@ -24,6 +24,7 @@ arrayvec.workspace = true
indexmap.workspace = true
memchr = "2.7.4"
salsa.workspace = true
salsa-macros.workspace = true
query-group.workspace = true
triomphe.workspace = true
nohash-hasher.workspace = true

View File

@ -76,7 +76,7 @@ pub type FxIndexMap<K, V> =
pub type FilePosition = FilePositionWrapper<FileId>;
pub type FileRange = FileRangeWrapper<FileId>;
#[salsa::db]
#[salsa_macros::db]
pub struct RootDatabase {
// FIXME: Revisit this commit now that we migrated to the new salsa, given we store arcs in this
// db directly now
@ -91,7 +91,7 @@ pub struct RootDatabase {
impl std::panic::RefUnwindSafe for RootDatabase {}
#[salsa::db]
#[salsa_macros::db]
impl salsa::Database for RootDatabase {
fn salsa_event(&self, _event: &dyn Fn() -> salsa::Event) {}
}
@ -118,7 +118,7 @@ impl fmt::Debug for RootDatabase {
}
}
#[salsa::db]
#[salsa_macros::db]
impl SourceDatabase for RootDatabase {
fn file_text(&self, file_id: vfs::FileId) -> FileText {
self.files.file_text(file_id)

View File

@ -20,3 +20,4 @@ syn = { version = "2.0", features = ["full", "extra-traits", "visit-mut"] }
[dev-dependencies]
expect-test = "1.5.1"
salsa.workspace = true
salsa-macros.workspace = true

View File

@ -178,7 +178,7 @@ pub(crate) fn query_group_impl(
let supertraits = &item_trait.supertraits;
let db_attr: Attribute = parse_quote! {
#[salsa::db]
#[salsa_macros::db]
};
item_trait.attrs.push(db_attr);
@ -407,7 +407,7 @@ pub(crate) fn query_group_impl(
.collect::<Vec<proc_macro2::TokenStream>>();
let input_struct = quote! {
#[salsa::input]
#[salsa_macros::input]
pub(crate) struct #input_struct_name {
#(#fields),*
}
@ -418,7 +418,7 @@ pub(crate) fn query_group_impl(
let create_data_method = quote! {
#[allow(non_snake_case)]
#[salsa::tracked]
#[salsa_macros::tracked]
fn #create_data_ident(db: &dyn #trait_name_ident) -> #input_struct_name {
#input_struct_name::new(db, #(#field_params),*)
}
@ -443,7 +443,7 @@ pub(crate) fn query_group_impl(
item_trait.items.append(&mut lookup_signatures);
let trait_impl = quote! {
#[salsa::db]
#[salsa_macros::db]
impl<DB> #trait_name_ident for DB
where
DB: #supertraits,

View File

@ -49,7 +49,7 @@ impl ToTokens for TrackedQuery {
})
.into_iter()
.chain(self.lru.map(|lru| quote!(lru = #lru)));
let annotation = quote!(#[salsa::tracked( #(#options),* )]);
let annotation = quote!(#[salsa_macros::tracked( #(#options),* )]);
let pat_and_tys = &self.pat_and_tys;
let params = self

View File

@ -6,7 +6,7 @@ use salsa::plumbing::AsId;
mod logger_db;
use logger_db::LoggerDb;
#[salsa::interned(no_lifetime)]
#[salsa_macros::interned(no_lifetime)]
pub struct InternedString {
data: String,
}

View File

@ -1,6 +1,6 @@
use std::sync::{Arc, Mutex};
#[salsa::db]
#[salsa_macros::db]
#[derive(Default, Clone)]
pub(crate) struct LoggerDb {
storage: salsa::Storage<Self>,
@ -12,7 +12,7 @@ struct Logger {
logs: Arc<Mutex<Vec<String>>>,
}
#[salsa::db]
#[salsa_macros::db]
impl salsa::Database for LoggerDb {
fn salsa_event(&self, event: &dyn Fn() -> salsa::Event) {
let event = event();

View File

@ -4,7 +4,7 @@ mod logger_db;
use logger_db::LoggerDb;
use query_group_macro::query_group;
#[salsa::input]
#[salsa_macros::input]
struct Input {
str: String,
}
@ -30,7 +30,7 @@ fn invoke_length_query_actual(db: &dyn PartialMigrationDatabase, input: Input) -
input.str(db).len()
}
#[salsa::tracked]
#[salsa_macros::tracked]
fn invoke_length_tracked_actual(db: &dyn PartialMigrationDatabase, input: Input) -> usize {
input.str(db).len()
}
@ -87,12 +87,12 @@ fn invoke_tracked_query() {
fn new_salsa_baseline() {
let db = LoggerDb::default();
#[salsa::input]
#[salsa_macros::input]
struct Input {
str: String,
}
#[salsa::tracked]
#[salsa_macros::tracked]
fn new_salsa_length_query(db: &dyn PartialMigrationDatabase, input: Input) -> usize {
input.str(db).len()
}

View File

@ -1,6 +1,6 @@
use query_group_macro::query_group;
#[salsa::db]
#[salsa_macros::db]
pub trait SourceDb: salsa::Database {
/// Text of the file.
fn file_text(&self, id: usize) -> String;

View File

@ -7,6 +7,7 @@ use std::{cell::RefCell, fs::read_to_string, panic::AssertUnwindSafe, path::Path
use hir::{ChangeWithProcMacros, Crate};
use ide::{AnalysisHost, DiagnosticCode, DiagnosticsConfig};
use ide_db::base_db;
use itertools::Either;
use paths::Utf8PathBuf;
use profile::StopWatch;
@ -310,7 +311,7 @@ impl flags::RustcTests {
let tester = AssertUnwindSafe(&mut tester);
let p = p.clone();
move || {
let _guard = stdx::panic_context::enter(p.display().to_string());
let _guard = base_db::DbPanicContext::enter(p.display().to_string());
{ tester }.0.test(p);
}
}) {

View File

@ -5,7 +5,7 @@ use std::mem;
use cargo_metadata::PackageId;
use ide::FileId;
use ide_db::FxHashMap;
use ide_db::{FxHashMap, base_db::DbPanicContext};
use itertools::Itertools;
use rustc_hash::FxHashSet;
use stdx::iter_eq_by;
@ -215,7 +215,7 @@ pub(crate) fn fetch_native_diagnostics(
kind: NativeDiagnosticsFetchKind,
) -> Vec<(FileId, Vec<lsp_types::Diagnostic>)> {
let _p = tracing::info_span!("fetch_native_diagnostics").entered();
let _ctx = stdx::panic_context::enter("fetch_native_diagnostics".to_owned());
let _ctx = DbPanicContext::enter("fetch_native_diagnostics".to_owned());
// the diagnostics produced may point to different files not requested by the concrete request,
// put those into here and filter later

View File

@ -4,7 +4,10 @@ use std::{
panic, thread,
};
use ide_db::base_db::salsa::{self, Cancelled};
use ide_db::base_db::{
DbPanicContext,
salsa::{self, Cancelled},
};
use lsp_server::{ExtractError, Response, ResponseError};
use serde::{Serialize, de::DeserializeOwned};
use stdx::thread::ThreadIntent;
@ -56,7 +59,7 @@ impl RequestDispatcher<'_> {
tracing::info_span!("request", method = ?req.method, "request_id" = ?req.id).entered();
tracing::debug!(?params);
let result = {
let _pctx = stdx::panic_context::enter(panic_context);
let _pctx = DbPanicContext::enter(panic_context);
f(self.global_state, params)
};
if let Ok(response) = result_to_response::<R>(req.id, result) {
@ -86,7 +89,7 @@ impl RequestDispatcher<'_> {
let global_state_snapshot = self.global_state.snapshot();
let result = panic::catch_unwind(move || {
let _pctx = stdx::panic_context::enter(panic_context);
let _pctx = DbPanicContext::enter(panic_context);
f(global_state_snapshot, params)
});
@ -257,7 +260,7 @@ impl RequestDispatcher<'_> {
}
.spawn(intent, move || {
let result = panic::catch_unwind(move || {
let _pctx = stdx::panic_context::enter(panic_context);
let _pctx = DbPanicContext::enter(panic_context);
f(world, params)
});
match thread_result_to_response::<R>(req.id.clone(), result) {
@ -421,11 +424,8 @@ impl NotificationDispatcher<'_> {
tracing::debug!(?params);
let _pctx = stdx::panic_context::enter(format!(
"\nversion: {}\nnotification: {}",
version(),
N::METHOD
));
let _pctx =
DbPanicContext::enter(format!("\nversion: {}\nnotification: {}", version(), N::METHOD));
if let Err(e) = f(self.global_state, params) {
tracing::error!(handler = %N::METHOD, error = %e, "notification handler failed");
}

View File

@ -94,16 +94,11 @@ const _: () = {
}
}
impl zalsa_struct_::Configuration for SyntaxContext {
const LOCATION: salsa::plumbing::Location =
salsa::plumbing::Location { file: file!(), line: line!() };
const DEBUG_NAME: &'static str = "SyntaxContextData";
type Fields<'a> = SyntaxContextData;
type Struct<'a> = SyntaxContext;
fn struct_from_id<'db>(id: salsa::Id) -> Self::Struct<'db> {
SyntaxContext::from_salsa_id(id)
}
fn deref_struct(s: Self::Struct<'_>) -> salsa::Id {
s.as_salsa_id()
.expect("`SyntaxContext::deref_structs()` called on a root `SyntaxContext`")
}
}
impl SyntaxContext {
pub fn ingredient<Db>(db: &Db) -> &zalsa_struct_::IngredientImpl<Self>

View File

@ -37,7 +37,7 @@ pub(crate) fn detect_target(sh: &Shell) -> String {
Ok(target) => target,
_ => match cmd!(sh, "rustc --print=host-tuple").read() {
Ok(target) => target,
Err(e) => panic!("Failed to detect target: {}\nPlease set RA_TARGET explicitly", e),
Err(e) => panic!("Failed to detect target: {e}\nPlease set RA_TARGET explicitly"),
},
}
}