From 855282fa5395881e1bc257ea4e32d6f510d361d6 Mon Sep 17 00:00:00 2001 From: Lukas Wirth Date: Wed, 12 Jun 2024 11:25:19 +0200 Subject: [PATCH] internal: Don't unnecessarily clone ModPaths in early name res --- crates/hir-def/src/body/lower.rs | 2 +- crates/hir-def/src/data.rs | 4 ++-- crates/hir-def/src/expander.rs | 2 +- crates/hir-def/src/generics.rs | 4 ++-- crates/hir-def/src/lib.rs | 15 +++++++-------- crates/hir-def/src/macro_expansion_tests/mod.rs | 2 +- crates/hir-def/src/nameres/attr_resolution.rs | 4 ++-- crates/hir-def/src/nameres/collector.rs | 12 ++++++------ crates/hir-expand/src/eager.rs | 6 +++--- crates/hir-ty/src/lower.rs | 4 ++-- crates/hir/src/semantics.rs | 2 +- crates/hir/src/source_analyzer.rs | 2 +- 12 files changed, 29 insertions(+), 30 deletions(-) diff --git a/crates/hir-def/src/body/lower.rs b/crates/hir-def/src/body/lower.rs index 5a5a8d302b..faba9050fc 100644 --- a/crates/hir-def/src/body/lower.rs +++ b/crates/hir-def/src/body/lower.rs @@ -965,7 +965,7 @@ impl ExprCollector<'_> { .resolve_path( self.db, module, - &path, + path, crate::item_scope::BuiltinShadowMode::Other, Some(MacroSubNs::Bang), ) diff --git a/crates/hir-def/src/data.rs b/crates/hir-def/src/data.rs index 077ded3d40..ded2fd243b 100644 --- a/crates/hir-def/src/data.rs +++ b/crates/hir-def/src/data.rs @@ -719,12 +719,12 @@ impl<'a> AssocItemCollector<'a> { let MacroCall { ast_id, expand_to, ctxt, ref path } = item_tree[call]; let module = self.expander.module.local_id; - let resolver = |path| { + let resolver = |path: &_| { self.def_map .resolve_path( self.db, module, - &path, + path, crate::item_scope::BuiltinShadowMode::Other, Some(MacroSubNs::Bang), ) diff --git a/crates/hir-def/src/expander.rs b/crates/hir-def/src/expander.rs index 73ce942c58..dbf8e6b225 100644 --- a/crates/hir-def/src/expander.rs +++ b/crates/hir-def/src/expander.rs @@ -56,7 +56,7 @@ impl Expander { &mut self, db: &dyn DefDatabase, macro_call: ast::MacroCall, - resolver: impl Fn(ModPath) -> Option, + resolver: impl Fn(&ModPath) -> Option, ) -> Result)>>, UnresolvedMacro> { // FIXME: within_limit should support this, instead of us having to extract the error let mut unresolved_macro_err = None; diff --git a/crates/hir-def/src/generics.rs b/crates/hir-def/src/generics.rs index a23df7fa2d..acead9dc17 100644 --- a/crates/hir-def/src/generics.rs +++ b/crates/hir-def/src/generics.rs @@ -403,12 +403,12 @@ impl GenericParamsCollector { let (def_map, expander) = &mut **exp; let module = expander.module.local_id; - let resolver = |path| { + let resolver = |path: &_| { def_map .resolve_path( db, module, - &path, + path, crate::item_scope::BuiltinShadowMode::Other, Some(MacroSubNs::Bang), ) diff --git a/crates/hir-def/src/lib.rs b/crates/hir-def/src/lib.rs index b86703c3cb..e3d5e752e7 100644 --- a/crates/hir-def/src/lib.rs +++ b/crates/hir-def/src/lib.rs @@ -1370,7 +1370,7 @@ pub trait AsMacroCall { &self, db: &dyn ExpandDatabase, krate: CrateId, - resolver: impl Fn(path::ModPath) -> Option + Copy, + resolver: impl Fn(&path::ModPath) -> Option + Copy, ) -> Option { self.as_call_id_with_errors(db, krate, resolver).ok()?.value } @@ -1379,7 +1379,7 @@ pub trait AsMacroCall { &self, db: &dyn ExpandDatabase, krate: CrateId, - resolver: impl Fn(path::ModPath) -> Option + Copy, + resolver: impl Fn(&path::ModPath) -> Option + Copy, ) -> Result>, UnresolvedMacro>; } @@ -1388,7 +1388,7 @@ impl AsMacroCall for InFile<&ast::MacroCall> { &self, db: &dyn ExpandDatabase, krate: CrateId, - resolver: impl Fn(path::ModPath) -> Option + Copy, + resolver: impl Fn(&path::ModPath) -> Option + Copy, ) -> Result>, UnresolvedMacro> { let expands_to = hir_expand::ExpandTo::from_call_site(self.value); let ast_id = AstId::new(self.file_id, db.ast_id_map(self.file_id).ast_id(self.value)); @@ -1437,7 +1437,7 @@ fn macro_call_as_call_id( call_site: SyntaxContextId, expand_to: ExpandTo, krate: CrateId, - resolver: impl Fn(path::ModPath) -> Option + Copy, + resolver: impl Fn(&path::ModPath) -> Option + Copy, ) -> Result, UnresolvedMacro> { macro_call_as_call_id_with_eager(db, call, call_site, expand_to, krate, resolver, resolver) .map(|res| res.value) @@ -1449,11 +1449,10 @@ fn macro_call_as_call_id_with_eager( call_site: SyntaxContextId, expand_to: ExpandTo, krate: CrateId, - resolver: impl FnOnce(path::ModPath) -> Option, - eager_resolver: impl Fn(path::ModPath) -> Option, + resolver: impl FnOnce(&path::ModPath) -> Option, + eager_resolver: impl Fn(&path::ModPath) -> Option, ) -> Result>, UnresolvedMacro> { - let def = - resolver(call.path.clone()).ok_or_else(|| UnresolvedMacro { path: call.path.clone() })?; + let def = resolver(&call.path).ok_or_else(|| UnresolvedMacro { path: call.path.clone() })?; let res = match def.kind { MacroDefKind::BuiltInEager(..) => expand_eager_macro_input( diff --git a/crates/hir-def/src/macro_expansion_tests/mod.rs b/crates/hir-def/src/macro_expansion_tests/mod.rs index 8904aca9f2..dc964b3c9a 100644 --- a/crates/hir-def/src/macro_expansion_tests/mod.rs +++ b/crates/hir-def/src/macro_expansion_tests/mod.rs @@ -96,7 +96,7 @@ pub fn identity_when_valid(_attr: TokenStream, item: TokenStream) -> TokenStream let res = macro_call .as_call_id_with_errors(&db, krate, |path| { resolver - .resolve_path_as_macro(&db, &path, Some(MacroSubNs::Bang)) + .resolve_path_as_macro(&db, path, Some(MacroSubNs::Bang)) .map(|(it, _)| db.macro_def(it)) }) .unwrap(); diff --git a/crates/hir-def/src/nameres/attr_resolution.rs b/crates/hir-def/src/nameres/attr_resolution.rs index 5829887c45..460f1f1407 100644 --- a/crates/hir-def/src/nameres/attr_resolution.rs +++ b/crates/hir-def/src/nameres/attr_resolution.rs @@ -137,10 +137,10 @@ pub(super) fn derive_macro_as_call_id( derive_pos: u32, call_site: SyntaxContextId, krate: CrateId, - resolver: impl Fn(path::ModPath) -> Option<(MacroId, MacroDefId)>, + resolver: impl Fn(&path::ModPath) -> Option<(MacroId, MacroDefId)>, derive_macro_id: MacroCallId, ) -> Result<(MacroId, MacroDefId, MacroCallId), UnresolvedMacro> { - let (macro_id, def_id) = resolver(item_attr.path.clone()) + let (macro_id, def_id) = resolver(&item_attr.path) .filter(|(_, def_id)| def_id.is_derive()) .ok_or_else(|| UnresolvedMacro { path: item_attr.path.clone() })?; let call_id = def_id.make_call( diff --git a/crates/hir-def/src/nameres/collector.rs b/crates/hir-def/src/nameres/collector.rs index cf5e0c22ce..4be35590e1 100644 --- a/crates/hir-def/src/nameres/collector.rs +++ b/crates/hir-def/src/nameres/collector.rs @@ -1137,18 +1137,18 @@ impl DefCollector<'_> { MacroSubNs::Attr } }; - let resolver = |path| { + let resolver = |path: &_| { let resolved_res = self.def_map.resolve_path_fp_with_macro( self.db, ResolveMode::Other, directive.module_id, - &path, + path, BuiltinShadowMode::Module, Some(subns), ); resolved_res.resolved_def.take_macros().map(|it| (it, self.db.macro_def(it))) }; - let resolver_def_id = |path| resolver(path).map(|(_, it)| it); + let resolver_def_id = |path: &_| resolver(path).map(|(_, it)| it); match &directive.kind { MacroDirectiveKind::FnLike { ast_id, expand_to, ctxt: call_site } => { @@ -1251,7 +1251,7 @@ impl DefCollector<'_> { } } - let def = match resolver_def_id(path.clone()) { + let def = match resolver_def_id(path) { Some(def) if def.is_attribute() => def, _ => return Resolved::No, }; @@ -1439,7 +1439,7 @@ impl DefCollector<'_> { self.db, ResolveMode::Other, directive.module_id, - &path, + path, BuiltinShadowMode::Module, Some(MacroSubNs::Bang), ); @@ -2339,7 +2339,7 @@ impl ModCollector<'_, '_> { db, ResolveMode::Other, self.module_id, - &path, + path, BuiltinShadowMode::Module, Some(MacroSubNs::Bang), ); diff --git a/crates/hir-expand/src/eager.rs b/crates/hir-expand/src/eager.rs index 64e04bc08f..3e0d2dfa6c 100644 --- a/crates/hir-expand/src/eager.rs +++ b/crates/hir-expand/src/eager.rs @@ -39,7 +39,7 @@ pub fn expand_eager_macro_input( ast_id: AstId, def: MacroDefId, call_site: SyntaxContextId, - resolver: &dyn Fn(ModPath) -> Option, + resolver: &dyn Fn(&ModPath) -> Option, ) -> ExpandResult> { let expand_to = ExpandTo::from_call_site(macro_call); @@ -138,7 +138,7 @@ fn eager_macro_recur( curr: InFile, krate: CrateId, call_site: SyntaxContextId, - macro_resolver: &dyn Fn(ModPath) -> Option, + macro_resolver: &dyn Fn(&ModPath) -> Option, ) -> ExpandResult> { let original = curr.value.clone_for_update(); @@ -172,7 +172,7 @@ fn eager_macro_recur( let def = match call.path().and_then(|path| { ModPath::from_src(db, path, &mut |range| span_map.span_at(range.start()).ctx) }) { - Some(path) => match macro_resolver(path.clone()) { + Some(path) => match macro_resolver(&path) { Some(def) => def, None => { error = diff --git a/crates/hir-ty/src/lower.rs b/crates/hir-ty/src/lower.rs index 04ace38202..d3e79541ab 100644 --- a/crates/hir-ty/src/lower.rs +++ b/crates/hir-ty/src/lower.rs @@ -416,9 +416,9 @@ impl<'a> TyLoweringContext<'a> { }; let ty = { let macro_call = macro_call.to_node(self.db.upcast()); - let resolver = |path| { + let resolver = |path: &_| { self.resolver - .resolve_path_as_macro(self.db.upcast(), &path, Some(MacroSubNs::Bang)) + .resolve_path_as_macro(self.db.upcast(), path, Some(MacroSubNs::Bang)) .map(|(it, _)| it) }; match expander.enter_expand::(self.db.upcast(), macro_call, resolver) diff --git a/crates/hir/src/semantics.rs b/crates/hir/src/semantics.rs index 964401d48d..5ed75cdd47 100644 --- a/crates/hir/src/semantics.rs +++ b/crates/hir/src/semantics.rs @@ -430,7 +430,7 @@ impl<'db> SemanticsImpl<'db> { let macro_call = InFile::new(file_id, actual_macro_call); let krate = resolver.krate(); let macro_call_id = macro_call.as_call_id(self.db.upcast(), krate, |path| { - resolver.resolve_path_as_macro_def(self.db.upcast(), &path, Some(MacroSubNs::Bang)) + resolver.resolve_path_as_macro_def(self.db.upcast(), path, Some(MacroSubNs::Bang)) })?; hir_expand::db::expand_speculative( self.db.upcast(), diff --git a/crates/hir/src/source_analyzer.rs b/crates/hir/src/source_analyzer.rs index 7ce64b4c48..8e71a54f80 100644 --- a/crates/hir/src/source_analyzer.rs +++ b/crates/hir/src/source_analyzer.rs @@ -826,7 +826,7 @@ impl SourceAnalyzer { // FIXME: This causes us to parse, generally this is the wrong approach for resolving a // macro call to a macro call id! let macro_call_id = macro_call.as_call_id(db.upcast(), krate, |path| { - self.resolver.resolve_path_as_macro_def(db.upcast(), &path, Some(MacroSubNs::Bang)) + self.resolver.resolve_path_as_macro_def(db.upcast(), path, Some(MacroSubNs::Bang)) })?; // why the 64? Some(macro_call_id.as_macro_file()).filter(|it| it.expansion_level(db.upcast()) < 64)