Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
Show all changes
76 commits
Select commit Hold shift + click to select a range
de5c506
update to literal-escaper 0.0.4 for better API without `unreachable` …
hkBst Mar 7, 2025
74e92a8
Format goto_type_definition
lnicola Jun 16, 2025
47b29ea
In "Wrap return type" assist, don't wrap exit points if they already …
ChayimFriedman2 Jun 22, 2025
a78bc7c
Don't run doctests
ChayimFriedman2 Jun 22, 2025
3db7cff
Preparing for merge from rust-lang/rust
lnicola Jun 23, 2025
3c4a690
Merge from rust-lang/rust
lnicola Jun 23, 2025
18855c9
Document sysroot_project field in rust-project.json
Wilfred Jun 23, 2025
4b37534
Merge pull request #20063 from lnicola/sync-from-rust
lnicola Jun 23, 2025
d0ebff0
fix: Fix cargo project manifest not pointing to the workspace root
Veykril Jun 23, 2025
6c3a870
Merge pull request #20069 from Veykril/push-mnqkqxomtlxn
Veykril Jun 23, 2025
b3c7913
fix: Use `ROOT` hygiene for `args` inside new `format_args!` expansion
ShoyuVanilla Jun 23, 2025
dd142e4
Merge pull request #20073 from ShoyuVanilla/fix-fmt-args-hygiene
ChayimFriedman2 Jun 23, 2025
c37994c
fix: Respect `.cargo/config.toml` `build.target-dir`
Veykril Jun 23, 2025
e40aa42
Add troubleshooting FAQ to the book
ChayimFriedman2 Jun 23, 2025
c751049
Merge pull request #20076 from ChayimFriedman2/faq
lnicola Jun 23, 2025
98e7b94
feat: Extend vscode 'run' command with optional mode argument for run…
markpots5 Jun 23, 2025
7ce7c2e
Merge pull request #20072 from Veykril/push-sorvvvzskywv
Veykril Jun 24, 2025
c30af1b
Merge pull request #20062 from ChayimFriedman2/doctests
Veykril Jun 24, 2025
1d3b517
Do not default to 'static for trait object lifetimes
Veykril Jun 18, 2025
bb164bf
Merge pull request #20036 from Veykril/push-yquvoyrxkksx
Veykril Jun 24, 2025
04c9089
Merge pull request #20064 from Wilfred/document_sysroot_project
Veykril Jun 24, 2025
e8388b0
Merge pull request #20061 from ChayimFriedman2/wrap-ret-ty
Veykril Jun 24, 2025
40aeda9
Cleanup `folding_ranges` and support more things
Veykril Jun 24, 2025
1fffcff
Merge pull request #20080 from Veykril/push-vnrwqppplykm
Veykril Jun 24, 2025
0b648f8
Merge pull request #20012 from lnicola/bump-literal-escaper
Veykril Jun 24, 2025
7eb776e
Remove special casing in command factory (revert changes in ctx.ts), …
markpots5 Jun 24, 2025
18e008b
ci: Fix cancel parallel jobs on windows
ShoyuVanilla Jun 24, 2025
8b52bab
Short circuit a couple hir-ty/lower queries
Veykril Jun 24, 2025
6968130
Merge pull request #20087 from Veykril/push-rrtkwpzmmwwz
Veykril Jun 24, 2025
abb956b
Fix link in the book
ChayimFriedman2 Jun 25, 2025
4e61517
Merge pull request #20089 from ChayimFriedman2/faq
ChayimFriedman2 Jun 25, 2025
19b1938
De-arc trait items query
Veykril Jun 24, 2025
d083ae8
Merge pull request #20084 from ShoyuVanilla/fix-windows-cancel-par
Veykril Jun 25, 2025
0876a56
Merge pull request #20077 from markpots5/master
Veykril Jun 25, 2025
ca062eb
Merge pull request #20088 from Veykril/push-qrslvzzlqqoz
Veykril Jun 25, 2025
7d6f77f
Drop rustc workspace loading error, if we don't needs its sources
Veykril Jun 25, 2025
cd4100d
Merge pull request #20092 from Veykril/push-kollxvpyknqs
Veykril Jun 25, 2025
a12b96f
Don't show notifications on failed rustfmt calls
lnicola Jun 25, 2025
a010990
Adjust minicore for Sized Hierarchy changes
Veykril Jun 25, 2025
889770a
Merge pull request #20096 from lnicola/silence-rustfmt-failed
Veykril Jun 25, 2025
587ded9
Unify formatting of progress messages
regexident Jun 25, 2025
ed5618f
minor: Decrease minimal toolchain version for `comp-time-deps` by `0.1`
ShoyuVanilla Jun 25, 2025
fb8ff25
Merge pull request #20098 from regexident/cleanup-progress-messages
davidbarsky Jun 25, 2025
3e5c46f
Merge pull request #20101 from ShoyuVanilla/comp-time-deps-sooner
lnicola Jun 26, 2025
62e112a
feat: highlighting of related return values while the cursor is on an…
roife Apr 9, 2025
4373a5d
refactor: improve macro handling in navigation for control-flow kws
roife Apr 9, 2025
7ab46b4
refactor: rename `branches` to `branch_exit_points` in highlight_related
roife Apr 15, 2025
bff9f4c
refactor: simplify functions related to branch_exit_points in highlig…
roife Apr 15, 2025
dc9e9fd
refactor: enhance highlighting for control flow kws in macros
roife Jun 26, 2025
54c14fc
Prettify AST in `PathTransform` if it's coming from a macro
ChayimFriedman2 Jun 26, 2025
a45726d
Merge pull request #19546 from roife/branch-value-highlights
Veykril Jun 26, 2025
0af0367
Cleanup `provideCodeActions` vscode hook
Veykril Jun 26, 2025
50a540c
Merge pull request #20104 from Veykril/push-nqnmmlvksyty
Veykril Jun 26, 2025
c190510
Parse new const trait syntax
Veykril Jun 26, 2025
4a50562
Merge pull request #20105 from Veykril/push-qtmwnuqvsruw
Veykril Jun 26, 2025
919e8ef
Salsa idiomize `VariantFields` query
Veykril Jun 26, 2025
d3b9969
Merge pull request #20103 from ChayimFriedman2/path-transform-prettify
Veykril Jun 26, 2025
e019a37
Bring back the firewall query
Veykril Jun 26, 2025
7f03278
Merge pull request #20106 from Veykril/push-pytuxksnntux
Veykril Jun 26, 2025
1bd7565
Backport new sized-hierarchy trait bounds in old ways
ShoyuVanilla Jun 25, 2025
1a2e7aa
Merge pull request #20100 from ShoyuVanilla/ignore-sized-hierarchy
ChayimFriedman2 Jun 26, 2025
5996241
Fix completion in when typing `integer.|`
ChayimFriedman2 Jun 26, 2025
502bac3
Merge pull request #20110 from ChayimFriedman2/ambiguous-float
Veykril Jun 27, 2025
ea2e042
ci: Cancel workflow only after the main matrix has finished
Veykril Jun 28, 2025
9cd5826
Merge pull request #20116 from Veykril/push-uypnmlyvotlm
Veykril Jun 28, 2025
0f93d8a
ci: Fix up release workflow
Veykril Jun 28, 2025
7d5579d
Merge pull request #20118 from Veykril/push-nolsxzxmykls
Veykril Jun 28, 2025
0609735
Do not append `--compile-time-deps` to overwritten build script commands
Veykril Jun 29, 2025
638329b
Merge pull request #20121 from Veykril/push-vkkuutpsuypq
Veykril Jun 29, 2025
a203e41
Remove unnecessary parens in closure
chenyukang Jun 29, 2025
2a66a5b
Merge pull request #20122 from chenyukang/yukang-fix-remove-parens
ChayimFriedman2 Jun 29, 2025
bc06bb1
Remove last use of `rustc_pat_analysis::Captures`
zachs18 Jun 30, 2025
863d0b5
Merge pull request #20124 from zachs18/patch-1
Veykril Jun 30, 2025
3b5b350
Preparing for merge from rust-lang/rust
lnicola Jun 30, 2025
0edf572
Merge from rust-lang/rust
lnicola Jun 30, 2025
c5f4b80
Merge pull request #20128 from lnicola/sync-from-rust
lnicola Jun 30, 2025
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
9 changes: 1 addition & 8 deletions src/tools/rust-analyzer/crates/hir-def/src/db.rs
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ use crate::{
import_map::ImportMap,
item_tree::{ItemTree, file_item_tree_query},
lang_item::{self, LangItem},
nameres::{assoc::TraitItems, crate_def_map, diagnostics::DefDiagnostics},
nameres::crate_def_map,
signatures::{
ConstSignature, EnumSignature, FunctionSignature, ImplSignature, StaticSignature,
StructSignature, TraitAliasSignature, TraitSignature, TypeAliasSignature, UnionSignature,
Expand Down Expand Up @@ -119,13 +119,6 @@ pub trait DefDatabase: InternDatabase + ExpandDatabase + SourceDatabase {
id: VariantId,
) -> (Arc<VariantFields>, Arc<ExpressionStoreSourceMap>);

#[salsa::transparent]
#[salsa::invoke(TraitItems::trait_items_query)]
fn trait_items(&self, e: TraitId) -> Arc<TraitItems>;

#[salsa::invoke(TraitItems::trait_items_with_diagnostics_query)]
fn trait_items_with_diagnostics(&self, tr: TraitId) -> (Arc<TraitItems>, DefDiagnostics);

#[salsa::tracked]
fn variant_fields(&self, id: VariantId) -> Arc<VariantFields> {
self.variant_fields_with_source_map(id).0
Expand Down
8 changes: 4 additions & 4 deletions src/tools/rust-analyzer/crates/hir-def/src/import_map.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ use crate::{
AssocItemId, AttrDefId, Complete, FxIndexMap, ModuleDefId, ModuleId, TraitId,
db::DefDatabase,
item_scope::{ImportOrExternCrate, ItemInNs},
nameres::{DefMap, crate_def_map},
nameres::{DefMap, assoc::TraitItems, crate_def_map},
visibility::Visibility,
};

Expand Down Expand Up @@ -221,7 +221,7 @@ impl ImportMap {
trait_import_info: &ImportInfo,
) {
let _p = tracing::info_span!("collect_trait_assoc_items").entered();
for &(ref assoc_item_name, item) in &db.trait_items(tr).items {
for &(ref assoc_item_name, item) in &TraitItems::query(db, tr).items {
let module_def_id = match item {
AssocItemId::FunctionId(f) => ModuleDefId::from(f),
AssocItemId::ConstId(c) => ModuleDefId::from(c),
Expand Down Expand Up @@ -482,7 +482,7 @@ mod tests {
use expect_test::{Expect, expect};
use test_fixture::WithFixture;

use crate::{ItemContainerId, Lookup, test_db::TestDB};
use crate::{ItemContainerId, Lookup, nameres::assoc::TraitItems, test_db::TestDB};

use super::*;

Expand Down Expand Up @@ -580,7 +580,7 @@ mod tests {

let trait_info = dependency_imports.import_info_for(ItemInNs::Types(trait_id.into()))?;

let trait_items = db.trait_items(trait_id);
let trait_items = TraitItems::query(db, trait_id);
let (assoc_item_name, _) = trait_items
.items
.iter()
Expand Down
22 changes: 13 additions & 9 deletions src/tools/rust-analyzer/crates/hir-def/src/lang_item.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,10 @@ use triomphe::Arc;

use crate::{
AdtId, AssocItemId, AttrDefId, Crate, EnumId, EnumVariantId, FunctionId, ImplId, ModuleDefId,
StaticId, StructId, TraitId, TypeAliasId, UnionId, db::DefDatabase, expr_store::path::Path,
nameres::crate_def_map,
StaticId, StructId, TraitId, TypeAliasId, UnionId,
db::DefDatabase,
expr_store::path::Path,
nameres::{assoc::TraitItems, crate_def_map},
};

#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
Expand Down Expand Up @@ -113,14 +115,16 @@ pub fn crate_lang_items(db: &dyn DefDatabase, krate: Crate) -> Option<Box<LangIt
match def {
ModuleDefId::TraitId(trait_) => {
lang_items.collect_lang_item(db, trait_, LangItemTarget::Trait);
db.trait_items(trait_).items.iter().for_each(|&(_, assoc_id)| match assoc_id {
AssocItemId::FunctionId(f) => {
lang_items.collect_lang_item(db, f, LangItemTarget::Function);
TraitItems::query(db, trait_).items.iter().for_each(|&(_, assoc_id)| {
match assoc_id {
AssocItemId::FunctionId(f) => {
lang_items.collect_lang_item(db, f, LangItemTarget::Function);
}
AssocItemId::TypeAliasId(alias) => {
lang_items.collect_lang_item(db, alias, LangItemTarget::TypeAlias)
}
AssocItemId::ConstId(_) => {}
}
AssocItemId::TypeAliasId(alias) => {
lang_items.collect_lang_item(db, alias, LangItemTarget::TypeAlias)
}
AssocItemId::ConstId(_) => {}
});
}
ModuleDefId::AdtId(AdtId::EnumId(e)) => {
Expand Down
11 changes: 10 additions & 1 deletion src/tools/rust-analyzer/crates/hir-def/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,9 @@ use crate::{
db::DefDatabase,
hir::generics::{LocalLifetimeParamId, LocalTypeOrConstParamId},
nameres::{
LocalDefMap, assoc::ImplItems, block_def_map, crate_def_map, crate_local_def_map,
LocalDefMap,
assoc::{ImplItems, TraitItems},
block_def_map, crate_def_map, crate_local_def_map,
diagnostics::DefDiagnostics,
},
signatures::{EnumVariants, InactiveEnumVariantCode, VariantFields},
Expand Down Expand Up @@ -282,6 +284,13 @@ impl_intern!(StaticId, StaticLoc, intern_static, lookup_intern_static);
pub type TraitLoc = ItemLoc<ast::Trait>;
impl_intern!(TraitId, TraitLoc, intern_trait, lookup_intern_trait);

impl TraitId {
#[inline]
pub fn trait_items(self, db: &dyn DefDatabase) -> &TraitItems {
TraitItems::query(db, self)
}
}

pub type TraitAliasLoc = ItemLoc<ast::TraitAlias>;
impl_intern!(TraitAliasId, TraitAliasLoc, intern_trait_alias, lookup_intern_trait_alias);

Expand Down
12 changes: 7 additions & 5 deletions src/tools/rust-analyzer/crates/hir-def/src/nameres/assoc.rs
Original file line number Diff line number Diff line change
Expand Up @@ -38,24 +38,26 @@ pub struct TraitItems {
pub macro_calls: ThinVec<(AstId<ast::Item>, MacroCallId)>,
}

#[salsa::tracked]
impl TraitItems {
#[inline]
pub(crate) fn trait_items_query(db: &dyn DefDatabase, tr: TraitId) -> Arc<TraitItems> {
db.trait_items_with_diagnostics(tr).0
pub(crate) fn query(db: &dyn DefDatabase, tr: TraitId) -> &TraitItems {
&Self::query_with_diagnostics(db, tr).0
}

pub(crate) fn trait_items_with_diagnostics_query(
#[salsa::tracked(returns(ref))]
pub fn query_with_diagnostics(
db: &dyn DefDatabase,
tr: TraitId,
) -> (Arc<TraitItems>, DefDiagnostics) {
) -> (TraitItems, DefDiagnostics) {
let ItemLoc { container: module_id, id: ast_id } = tr.lookup(db);

let collector =
AssocItemCollector::new(db, module_id, ItemContainerId::TraitId(tr), ast_id.file_id);
let source = ast_id.with_value(collector.ast_id_map.get(ast_id.value)).to_node(db);
let (items, macro_calls, diagnostics) = collector.collect(source.assoc_item_list());

(Arc::new(TraitItems { macro_calls, items }), DefDiagnostics::new(diagnostics))
(TraitItems { macro_calls, items }, DefDiagnostics::new(diagnostics))
}

pub fn associated_types(&self) -> impl Iterator<Item = TypeAliasId> + '_ {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ use crate::{
macro_call_as_call_id,
nameres::{
BuiltinShadowMode, DefMap, LocalDefMap, MacroSubNs, ModuleData, ModuleOrigin, ResolveMode,
assoc::TraitItems,
attr_resolution::{attr_macro_as_call_id, derive_macro_as_call_id},
crate_def_map,
diagnostics::DefDiagnostic,
Expand Down Expand Up @@ -1020,8 +1021,7 @@ impl<'db> DefCollector<'db> {
let resolutions = if true {
vec![]
} else {
self.db
.trait_items(it)
TraitItems::query(self.db, it)
.items
.iter()
.map(|&(ref name, variant)| {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,8 @@ use crate::{
item_scope::{BUILTIN_SCOPE, ImportOrExternCrate},
item_tree::FieldsShape,
nameres::{
BlockInfo, BuiltinShadowMode, DefMap, LocalDefMap, MacroSubNs, crate_def_map,
sub_namespace_match,
BlockInfo, BuiltinShadowMode, DefMap, LocalDefMap, MacroSubNs, assoc::TraitItems,
crate_def_map, sub_namespace_match,
},
per_ns::PerNs,
visibility::{RawVisibility, Visibility},
Expand Down Expand Up @@ -584,8 +584,11 @@ impl DefMap {
// now resulting in a cycle.
// To properly implement this, trait item collection needs to be done in def map
// collection...
let item =
if true { None } else { db.trait_items(t).assoc_item_by_name(segment) };
let item = if true {
None
} else {
TraitItems::query(db, t).assoc_item_by_name(segment)
};
return match item {
Some(item) => ResolvePathResult::new(
match item {
Expand Down
2 changes: 1 addition & 1 deletion src/tools/rust-analyzer/crates/hir-ty/src/autoderef.rs
Original file line number Diff line number Diff line change
Expand Up @@ -208,7 +208,7 @@ pub(crate) fn deref_by_trait(
};
let trait_id = trait_id()?;
let target =
db.trait_items(trait_id).associated_type_by_name(&Name::new_symbol_root(sym::Target))?;
trait_id.trait_items(db).associated_type_by_name(&Name::new_symbol_root(sym::Target))?;

let projection = {
let b = TyBuilder::subst_for_def(db, trait_id, None);
Expand Down
14 changes: 7 additions & 7 deletions src/tools/rust-analyzer/crates/hir-ty/src/chalk_db.rs
Original file line number Diff line number Diff line change
Expand Up @@ -315,9 +315,8 @@ impl chalk_solve::RustIrDatabase<Interner> for ChalkContext<'_> {
crate::ImplTraitId::AsyncBlockTypeImplTrait(..) => {
if let Some((future_trait, future_output)) =
LangItem::Future.resolve_trait(self.db, self.krate).and_then(|trait_| {
let alias = self
.db
.trait_items(trait_)
let alias = trait_
.trait_items(self.db)
.associated_type_by_name(&Name::new_symbol_root(sym::Output))?;
Some((trait_, alias))
})
Expand Down Expand Up @@ -711,7 +710,7 @@ pub(crate) fn trait_datum_query(
};
let where_clauses = convert_where_clauses(db, trait_.into(), &bound_vars);
let associated_ty_ids =
db.trait_items(trait_).associated_types().map(to_assoc_type_id).collect();
trait_.trait_items(db).associated_types().map(to_assoc_type_id).collect();
let trait_datum_bound = rust_ir::TraitDatumBound { where_clauses };
let well_known = db.lang_attr(trait_.into()).and_then(well_known_trait_from_lang_item);
let trait_datum = TraitDatum {
Expand Down Expand Up @@ -879,7 +878,7 @@ fn impl_def_datum(db: &dyn HirDatabase, krate: Crate, impl_id: hir_def::ImplId)
let polarity = if negative { rust_ir::Polarity::Negative } else { rust_ir::Polarity::Positive };

let impl_datum_bound = rust_ir::ImplDatumBound { trait_ref, where_clauses };
let trait_data = db.trait_items(trait_);
let trait_data = trait_.trait_items(db);
let associated_ty_value_ids = impl_id
.impl_items(db)
.items
Expand Down Expand Up @@ -931,8 +930,9 @@ fn type_alias_associated_ty_value(
.into_value_and_skipped_binders()
.0; // we don't return any assoc ty values if the impl'd trait can't be resolved

let assoc_ty = db
.trait_items(trait_ref.hir_trait_id())
let assoc_ty = trait_ref
.hir_trait_id()
.trait_items(db)
.associated_type_by_name(&type_alias_data.name)
.expect("assoc ty value should not exist"); // validated when building the impl data as well
let (ty, binders) = db.ty(type_alias.into()).into_value_and_skipped_binders();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -494,7 +494,7 @@ impl FilterMapNextChecker {
Some(next_function_id),
match next_function_id.lookup(db).container {
ItemContainerId::TraitId(iterator_trait_id) => {
let iterator_trait_items = &db.trait_items(iterator_trait_id).items;
let iterator_trait_items = &iterator_trait_id.trait_items(db).items;
iterator_trait_items.iter().find_map(|(name, it)| match it {
&AssocItemId::FunctionId(id) if *name == sym::filter_map => Some(id),
_ => None,
Expand Down
2 changes: 1 addition & 1 deletion src/tools/rust-analyzer/crates/hir-ty/src/display.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1394,7 +1394,7 @@ impl HirDisplay for Ty {
let future_trait =
LangItem::Future.resolve_trait(db, body.module(db).krate());
let output = future_trait.and_then(|t| {
db.trait_items(t)
t.trait_items(db)
.associated_type_by_name(&Name::new_symbol_root(sym::Output))
});
write!(f, "impl ")?;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ where

// rustc checks for non-lifetime binders here, but we don't support HRTB yet

let trait_data = db.trait_items(trait_);
let trait_data = trait_.trait_items(db);
for (_, assoc_item) in &trait_data.items {
dyn_compatibility_violation_for_assoc_item(db, trait_, *assoc_item, cb)?;
}
Expand Down Expand Up @@ -164,7 +164,7 @@ fn predicates_reference_self(db: &dyn HirDatabase, trait_: TraitId) -> bool {

// Same as the above, `predicates_reference_self`
fn bounds_reference_self(db: &dyn HirDatabase, trait_: TraitId) -> bool {
let trait_data = db.trait_items(trait_);
let trait_data = trait_.trait_items(db);
trait_data
.items
.iter()
Expand Down
2 changes: 1 addition & 1 deletion src/tools/rust-analyzer/crates/hir-ty/src/infer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1813,7 +1813,7 @@ impl<'db> InferenceContext<'db> {
}

fn resolve_output_on(&self, trait_: TraitId) -> Option<TypeAliasId> {
self.db.trait_items(trait_).associated_type_by_name(&Name::new_symbol_root(sym::Output))
trait_.trait_items(self.db).associated_type_by_name(&Name::new_symbol_root(sym::Output))
}

fn resolve_lang_trait(&self, lang: LangItem) -> Option<TraitId> {
Expand Down
5 changes: 2 additions & 3 deletions src/tools/rust-analyzer/crates/hir-ty/src/infer/closure.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1210,9 +1210,8 @@ impl InferenceContext<'_> {
if let Some(deref_trait) =
self.resolve_lang_item(LangItem::DerefMut).and_then(|it| it.as_trait())
{
if let Some(deref_fn) = self
.db
.trait_items(deref_trait)
if let Some(deref_fn) = deref_trait
.trait_items(self.db)
.method_by_name(&Name::new_symbol_root(sym::deref_mut))
{
break 'b deref_fn == f;
Expand Down
14 changes: 6 additions & 8 deletions src/tools/rust-analyzer/crates/hir-ty/src/infer/expr.rs
Original file line number Diff line number Diff line change
Expand Up @@ -654,9 +654,8 @@ impl InferenceContext<'_> {
match op {
UnaryOp::Deref => {
if let Some(deref_trait) = self.resolve_lang_trait(LangItem::Deref) {
if let Some(deref_fn) = self
.db
.trait_items(deref_trait)
if let Some(deref_fn) = deref_trait
.trait_items(self.db)
.method_by_name(&Name::new_symbol_root(sym::deref))
{
// FIXME: this is wrong in multiple ways, subst is empty, and we emit it even for builtin deref (note that
Expand Down Expand Up @@ -813,9 +812,8 @@ impl InferenceContext<'_> {
self.table.new_lifetime_var(),
));
self.write_expr_adj(*base, adj.into_boxed_slice());
if let Some(func) = self
.db
.trait_items(index_trait)
if let Some(func) = index_trait
.trait_items(self.db)
.method_by_name(&Name::new_symbol_root(sym::index))
{
let subst = TyBuilder::subst_for_def(self.db, index_trait, None);
Expand Down Expand Up @@ -1148,7 +1146,7 @@ impl InferenceContext<'_> {
let Some(trait_) = fn_x.get_id(self.db, self.table.trait_env.krate) else {
return;
};
let trait_data = self.db.trait_items(trait_);
let trait_data = trait_.trait_items(self.db);
if let Some(func) = trait_data.method_by_name(&fn_x.method_name()) {
let subst = TyBuilder::subst_for_def(self.db, trait_, None)
.push(callee_ty.clone())
Expand Down Expand Up @@ -1316,7 +1314,7 @@ impl InferenceContext<'_> {

let trait_func = lang_items_for_bin_op(op).and_then(|(name, lang_item)| {
let trait_id = self.resolve_lang_item(lang_item)?.as_trait()?;
let func = self.db.trait_items(trait_id).method_by_name(&name)?;
let func = trait_id.trait_items(self.db).method_by_name(&name)?;
Some((trait_id, func))
});
let (trait_, func) = match trait_func {
Expand Down
10 changes: 4 additions & 6 deletions src/tools/rust-analyzer/crates/hir-ty/src/infer/mutability.rs
Original file line number Diff line number Diff line change
Expand Up @@ -129,9 +129,8 @@ impl InferenceContext<'_> {
if let Some(index_trait) =
LangItem::IndexMut.resolve_trait(self.db, self.table.trait_env.krate)
{
if let Some(index_fn) = self
.db
.trait_items(index_trait)
if let Some(index_fn) = index_trait
.trait_items(self.db)
.method_by_name(&Name::new_symbol_root(sym::index_mut))
{
*f = index_fn;
Expand Down Expand Up @@ -194,9 +193,8 @@ impl InferenceContext<'_> {
});
if is_mut_ptr {
mutability = Mutability::Not;
} else if let Some(deref_fn) = self
.db
.trait_items(deref_trait)
} else if let Some(deref_fn) = deref_trait
.trait_items(self.db)
.method_by_name(&Name::new_symbol_root(sym::deref_mut))
{
*f = deref_fn;
Expand Down
2 changes: 1 addition & 1 deletion src/tools/rust-analyzer/crates/hir-ty/src/infer/path.rs
Original file line number Diff line number Diff line change
Expand Up @@ -278,7 +278,7 @@ impl InferenceContext<'_> {
) -> Option<(ValueNs, Substitution)> {
let trait_ = trait_ref.hir_trait_id();
let item =
self.db.trait_items(trait_).items.iter().map(|(_name, id)| *id).find_map(|item| {
trait_.trait_items(self.db).items.iter().map(|(_name, id)| *id).find_map(|item| {
match item {
AssocItemId::FunctionId(func) => {
if segment.name == &self.db.function_signature(func).name {
Expand Down
2 changes: 1 addition & 1 deletion src/tools/rust-analyzer/crates/hir-ty/src/infer/unify.rs
Original file line number Diff line number Diff line change
Expand Up @@ -859,7 +859,7 @@ impl<'a> InferenceTable<'a> {
] {
let krate = self.trait_env.krate;
let fn_trait = fn_trait_name.get_id(self.db, krate)?;
let trait_data = self.db.trait_items(fn_trait);
let trait_data = fn_trait.trait_items(self.db);
let output_assoc_type =
trait_data.associated_type_by_name(&Name::new_symbol_root(output_assoc_name))?;

Expand Down
4 changes: 2 additions & 2 deletions src/tools/rust-analyzer/crates/hir-ty/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -891,8 +891,8 @@ pub fn callable_sig_from_fn_trait(
) -> Option<(FnTrait, CallableSig)> {
let krate = trait_env.krate;
let fn_once_trait = FnTrait::FnOnce.get_id(db, krate)?;
let output_assoc_type = db
.trait_items(fn_once_trait)
let output_assoc_type = fn_once_trait
.trait_items(db)
.associated_type_by_name(&Name::new_symbol_root(sym::Output))?;

let mut table = InferenceTable::new(db, trait_env.clone());
Expand Down
Loading