Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion crates/hir-ty/src/next_solver/generic_arg.rs
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ impl<'db> GenericArg<'db> {
pub fn expect_ty(self) -> Ty<'db> {
match self.kind() {
GenericArgKind::Type(ty) => ty,
_ => panic!("Expected ty, got {:?}", self),
_ => panic!("Expected ty, got {self:?}"),
}
}

Expand Down
9 changes: 3 additions & 6 deletions crates/ide-assists/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ mod tests;
pub mod utils;

use hir::Semantics;
use ide_db::{EditionedFileId, RootDatabase, base_db::salsa};
use ide_db::{EditionedFileId, RootDatabase};
use syntax::{Edition, TextRange};

pub(crate) use crate::assist_context::{AssistContext, Assists};
Expand All @@ -93,11 +93,8 @@ pub fn assists(
.unwrap_or_else(|| EditionedFileId::new(db, range.file_id, Edition::CURRENT));
let ctx = AssistContext::new(sema, config, hir::FileRange { file_id, range: range.range });
let mut acc = Assists::new(&ctx, resolve);
// the handlers may invoke trait solving related things which accesses salsa structs outside queries
salsa::attach(db, || {
handlers::all().iter().for_each(|handler| {
handler(&mut acc, &ctx);
});
handlers::all().iter().for_each(|handler| {
handler(&mut acc, &ctx);
});
acc.finish()
}
Expand Down
17 changes: 15 additions & 2 deletions crates/ide-assists/src/tests.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
mod generated;

use expect_test::expect;
use hir::{Semantics, setup_tracing};
use hir::{Semantics, db::HirDatabase, setup_tracing};
use ide_db::{
EditionedFileId, FileRange, RootDatabase, SnippetCap,
assists::ExprFillDefaultMode,
Expand All @@ -16,7 +16,7 @@ use test_utils::{assert_eq_text, extract_offset};

use crate::{
Assist, AssistConfig, AssistContext, AssistKind, AssistResolveStrategy, Assists, SingleResolve,
assists, handlers::Handler,
handlers::Handler,
};

pub(crate) const TEST_CONFIG: AssistConfig = AssistConfig {
Expand Down Expand Up @@ -103,6 +103,18 @@ pub(crate) const TEST_CONFIG_IMPORT_ONE: AssistConfig = AssistConfig {
prefer_self_ty: false,
};

fn assists(
db: &RootDatabase,
config: &AssistConfig,
resolve: AssistResolveStrategy,
range: ide_db::FileRange,
) -> Vec<Assist> {
salsa::attach(db, || {
HirDatabase::zalsa_register_downcaster(db);
crate::assists(db, config, resolve, range)
})
}

pub(crate) fn with_single_file(text: &str) -> (RootDatabase, EditionedFileId) {
RootDatabase::with_single_file(text)
}
Expand Down Expand Up @@ -320,6 +332,7 @@ fn check_with_config(
};
let mut acc = Assists::new(&ctx, resolve);
salsa::attach(&db, || {
HirDatabase::zalsa_register_downcaster(&db);
handler(&mut acc, &ctx);
});
let mut res = acc.finish();
Expand Down
5 changes: 2 additions & 3 deletions crates/ide-completion/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ mod snippet;
#[cfg(test)]
mod tests;

use base_db::salsa;
use ide_db::{
FilePosition, FxHashSet, RootDatabase,
imports::insert_use::{self, ImportScope},
Expand Down Expand Up @@ -229,7 +228,7 @@ pub fn completions(
{
let acc = &mut completions;

salsa::attach(db, || match analysis {
match analysis {
CompletionAnalysis::Name(name_ctx) => completions::complete_name(acc, ctx, name_ctx),
CompletionAnalysis::NameRef(name_ref_ctx) => {
completions::complete_name_ref(acc, ctx, name_ref_ctx)
Expand Down Expand Up @@ -257,7 +256,7 @@ pub fn completions(
);
}
CompletionAnalysis::UnexpandedAttrTT { .. } | CompletionAnalysis::String { .. } => (),
})
}
}

Some(completions.into())
Expand Down
6 changes: 3 additions & 3 deletions crates/ide-completion/src/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ mod type_pos;
mod use_tree;
mod visibility;

use base_db::SourceDatabase;
use base_db::{SourceDatabase, salsa};
use expect_test::Expect;
use hir::{PrefixKind, setup_tracing};
use ide_db::{
Expand Down Expand Up @@ -243,7 +243,7 @@ pub(crate) fn check_edit_with_config(
let ra_fixture_after = trim_indent(ra_fixture_after);
let (db, position) = position(ra_fixture_before);
let completions: Vec<CompletionItem> =
crate::completions(&db, &config, position, None).unwrap();
salsa::attach(&db, || crate::completions(&db, &config, position, None).unwrap());
let (completion,) = completions
.iter()
.filter(|it| it.lookup() == what)
Expand Down Expand Up @@ -306,7 +306,7 @@ pub(crate) fn get_all_items(
trigger_character: Option<char>,
) -> Vec<CompletionItem> {
let (db, position) = position(code);
let res = crate::completions(&db, &config, position, trigger_character)
let res = salsa::attach(&db, || crate::completions(&db, &config, position, trigger_character))
.map_or_else(Vec::default, Into::into);
// validate
res.iter().for_each(|it| {
Expand Down
12 changes: 5 additions & 7 deletions crates/ide-diagnostics/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ use hir::{
use ide_db::{
EditionedFileId, FileId, FileRange, FxHashMap, FxHashSet, RootDatabase, Severity, SnippetCap,
assists::{Assist, AssistId, AssistResolveStrategy, ExprFillDefaultMode},
base_db::{ReleaseChannel, RootQueryDb as _, salsa},
base_db::{ReleaseChannel, RootQueryDb as _},
generated::lints::{CLIPPY_LINT_GROUPS, DEFAULT_LINT_GROUPS, DEFAULT_LINTS, Lint, LintGroup},
imports::insert_use::InsertUseConfig,
label::Label,
Expand Down Expand Up @@ -537,12 +537,10 @@ pub fn full_diagnostics(
resolve: &AssistResolveStrategy,
file_id: FileId,
) -> Vec<Diagnostic> {
salsa::attach(db, || {
let mut res = syntax_diagnostics(db, config, file_id);
let sema = semantic_diagnostics(db, config, resolve, file_id);
res.extend(sema);
res
})
let mut res = syntax_diagnostics(db, config, file_id);
let sema = semantic_diagnostics(db, config, resolve, file_id);
res.extend(sema);
res
}

/// Returns whether to keep this diagnostic (or remove it).
Expand Down
75 changes: 46 additions & 29 deletions crates/ide-diagnostics/src/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ use hir::setup_tracing;
use ide_db::{
LineIndexDatabase, RootDatabase,
assists::{AssistResolveStrategy, ExprFillDefaultMode},
base_db::SourceDatabase,
base_db::{SourceDatabase, salsa},
};
use itertools::Itertools;
use stdx::trim_indent;
Expand Down Expand Up @@ -74,14 +74,16 @@ fn check_nth_fix_with_config(
let after = trim_indent(ra_fixture_after);

let (db, file_position) = RootDatabase::with_position(ra_fixture_before);
let diagnostic = super::full_diagnostics(
&db,
&config,
&AssistResolveStrategy::All,
file_position.file_id.file_id(&db),
)
.pop()
.expect("no diagnostics");
let diagnostic = salsa::attach(&db, || {
super::full_diagnostics(
&db,
&config,
&AssistResolveStrategy::All,
file_position.file_id.file_id(&db),
)
.pop()
.expect("no diagnostics")
});
let fix = &diagnostic
.fixes
.unwrap_or_else(|| panic!("{:?} diagnostic misses fixes", diagnostic.code))[nth];
Expand Down Expand Up @@ -127,12 +129,14 @@ pub(crate) fn check_has_fix(
let (db, file_position) = RootDatabase::with_position(ra_fixture_before);
let mut conf = DiagnosticsConfig::test_sample();
conf.expr_fill_default = ExprFillDefaultMode::Default;
let fix = super::full_diagnostics(
&db,
&conf,
&AssistResolveStrategy::All,
file_position.file_id.file_id(&db),
)
let fix = salsa::attach(&db, || {
super::full_diagnostics(
&db,
&conf,
&AssistResolveStrategy::All,
file_position.file_id.file_id(&db),
)
})
.into_iter()
.find(|d| {
d.fixes
Expand Down Expand Up @@ -166,12 +170,14 @@ pub(crate) fn check_has_fix(
/// Checks that there's a diagnostic *without* fix at `$0`.
pub(crate) fn check_no_fix(#[rust_analyzer::rust_fixture] ra_fixture: &str) {
let (db, file_position) = RootDatabase::with_position(ra_fixture);
let diagnostic = super::full_diagnostics(
&db,
&DiagnosticsConfig::test_sample(),
&AssistResolveStrategy::All,
file_position.file_id.file_id(&db),
)
let diagnostic = salsa::attach(&db, || {
super::full_diagnostics(
&db,
&DiagnosticsConfig::test_sample(),
&AssistResolveStrategy::All,
file_position.file_id.file_id(&db),
)
})
.pop()
.unwrap();
assert!(diagnostic.fixes.is_none(), "got a fix when none was expected: {diagnostic:?}");
Expand Down Expand Up @@ -206,7 +212,13 @@ pub(crate) fn check_diagnostics_with_config(
.iter()
.copied()
.flat_map(|file_id| {
super::full_diagnostics(&db, &config, &AssistResolveStrategy::All, file_id.file_id(&db))
salsa::attach(&db, || {
super::full_diagnostics(
&db,
&config,
&AssistResolveStrategy::All,
file_id.file_id(&db),
)
.into_iter()
.map(|d| {
let mut annotation = String::new();
Expand All @@ -224,6 +236,7 @@ pub(crate) fn check_diagnostics_with_config(
annotation.push_str(&d.message);
(d.range, annotation)
})
})
})
.map(|(diagnostic, annotation)| (diagnostic.file_id, (diagnostic.range, annotation)))
.into_group_map();
Expand Down Expand Up @@ -275,15 +288,19 @@ fn test_disabled_diagnostics() {
let (db, file_id) = RootDatabase::with_single_file(r#"mod foo;"#);
let file_id = file_id.file_id(&db);

let diagnostics = super::full_diagnostics(&db, &config, &AssistResolveStrategy::All, file_id);
let diagnostics = salsa::attach(&db, || {
super::full_diagnostics(&db, &config, &AssistResolveStrategy::All, file_id)
});
assert!(diagnostics.is_empty());

let diagnostics = super::full_diagnostics(
&db,
&DiagnosticsConfig::test_sample(),
&AssistResolveStrategy::All,
file_id,
);
let diagnostics = salsa::attach(&db, || {
super::full_diagnostics(
&db,
&DiagnosticsConfig::test_sample(),
&AssistResolveStrategy::All,
file_id,
)
});
assert!(!diagnostics.is_empty());
}

Expand Down
4 changes: 2 additions & 2 deletions crates/ide/src/goto_definition.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ use hir::{
};
use ide_db::{
RootDatabase, SymbolKind,
base_db::{AnchoredPath, SourceDatabase, salsa},
base_db::{AnchoredPath, SourceDatabase},
defs::{Definition, IdentClass},
famous_defs::FamousDefs,
helpers::pick_best_token,
Expand Down Expand Up @@ -108,7 +108,7 @@ pub(crate) fn goto_definition(
}

Some(
salsa::attach(sema.db, || IdentClass::classify_node(sema, &parent))?
IdentClass::classify_node(sema, &parent)?
.definitions()
.into_iter()
.flat_map(|(def, _)| {
Expand Down
43 changes: 19 additions & 24 deletions crates/ide/src/hover.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ use hir::{
};
use ide_db::{
FileRange, FxIndexSet, Ranker, RootDatabase,
base_db::salsa,
defs::{Definition, IdentClass, NameRefClass, OperatorClass},
famous_defs::FamousDefs,
helpers::pick_best_token,
Expand Down Expand Up @@ -137,20 +136,18 @@ pub(crate) fn hover(
let edition =
sema.attach_first_edition(file_id).map(|it| it.edition(db)).unwrap_or(Edition::CURRENT);
let display_target = sema.first_crate(file_id)?.to_display_target(db);
let mut res = salsa::attach(sema.db, || {
if range.is_empty() {
hover_offset(
sema,
FilePosition { file_id, offset: range.start() },
file,
config,
edition,
display_target,
)
} else {
hover_ranged(sema, frange, file, config, edition, display_target)
}
})?;
let mut res = if range.is_empty() {
hover_offset(
sema,
FilePosition { file_id, offset: range.start() },
file,
config,
edition,
display_target,
)
} else {
hover_ranged(sema, frange, file, config, edition, display_target)
}?;

if let HoverDocFormat::PlainText = config.format {
res.info.markup = remove_markdown(res.info.markup.as_str()).into();
Expand Down Expand Up @@ -293,7 +290,7 @@ fn hover_offset(
.into_iter()
.unique_by(|&((def, _), _, _, _)| def)
.map(|((def, subst), macro_arm, hovered_definition, node)| {
salsa::attach(sema.db, || hover_for_definition(
hover_for_definition(
sema,
file_id,
def,
Expand All @@ -304,7 +301,7 @@ fn hover_offset(
config,
edition,
display_target,
))
)
})
.collect::<Vec<_>>(),
)
Expand Down Expand Up @@ -583,13 +580,11 @@ fn goto_type_action_for_def(
});
}

salsa::attach(db, || {
if let Ok(generic_def) = GenericDef::try_from(def) {
generic_def.type_or_const_params(db).into_iter().for_each(|it| {
walk_and_push_ty(db, &it.ty(db), &mut push_new_def);
});
}
});
if let Ok(generic_def) = GenericDef::try_from(def) {
generic_def.type_or_const_params(db).into_iter().for_each(|it| {
walk_and_push_ty(db, &it.ty(db), &mut push_new_def);
});
}

let ty = match def {
Definition::Local(it) => Some(it.ty(db)),
Expand Down
Loading
Loading