aboutsummaryrefslogtreecommitdiff
path: root/crates/hir
diff options
context:
space:
mode:
authorbors[bot] <26634292+bors[bot]@users.noreply.github.com>2021-05-06 22:53:05 +0100
committerGitHub <[email protected]>2021-05-06 22:53:05 +0100
commit6fccb152b4646877e38dc29dce1b0cd826eb6908 (patch)
tree361153338ec7c32866a5477b3e7681d05a4b0b7c /crates/hir
parentb37b709459a4ff881a91965ebf0c39e3a449c304 (diff)
parent20ae41c1a12963e938cb3bd4c7c84007412d6fa6 (diff)
Merge #8746
8746: Don't store call-site text offsets in hygiene info r=matklad a=jonas-schievink This threads a lot more database references around in order to avoid storing a bare `TextOffset` in the hygiene info. This `TextOffset` made hygiene info and `ItemTree`s more volatile than they should be, leading to excessive recomputation of `ItemTree`s. The incremental test added in https://github.com/rust-analyzer/rust-analyzer/pull/8721 is now passing with these changes. closes https://github.com/rust-analyzer/rust-analyzer/pull/8721 Co-authored-by: Jonas Schievink <[email protected]> Co-authored-by: Aleksey Kladov <[email protected]>
Diffstat (limited to 'crates/hir')
-rw-r--r--crates/hir/src/attrs.rs2
-rw-r--r--crates/hir/src/lib.rs2
-rw-r--r--crates/hir/src/source_analyzer.rs2
3 files changed, 3 insertions, 3 deletions
diff --git a/crates/hir/src/attrs.rs b/crates/hir/src/attrs.rs
index 4a11622fc..e8fa3c56e 100644
--- a/crates/hir/src/attrs.rs
+++ b/crates/hir/src/attrs.rs
@@ -112,7 +112,7 @@ fn resolve_doc_path(
112 AttrDefId::MacroDefId(_) => return None, 112 AttrDefId::MacroDefId(_) => return None,
113 }; 113 };
114 let path = ast::Path::parse(link).ok()?; 114 let path = ast::Path::parse(link).ok()?;
115 let modpath = ModPath::from_src(path, &Hygiene::new_unhygienic()).unwrap(); 115 let modpath = ModPath::from_src(db.upcast(), path, &Hygiene::new_unhygienic()).unwrap();
116 let resolved = resolver.resolve_module_path_in_items(db.upcast(), &modpath); 116 let resolved = resolver.resolve_module_path_in_items(db.upcast(), &modpath);
117 if resolved == PerNs::none() { 117 if resolved == PerNs::none() {
118 if let Some(trait_id) = resolver.resolve_module_path_in_trait_items(db.upcast(), &modpath) { 118 if let Some(trait_id) = resolver.resolve_module_path_in_trait_items(db.upcast(), &modpath) {
diff --git a/crates/hir/src/lib.rs b/crates/hir/src/lib.rs
index 6fcc58f61..f876339de 100644
--- a/crates/hir/src/lib.rs
+++ b/crates/hir/src/lib.rs
@@ -1666,7 +1666,7 @@ impl Impl {
1666 .value 1666 .value
1667 .attrs() 1667 .attrs()
1668 .filter_map(|it| { 1668 .filter_map(|it| {
1669 let path = ModPath::from_src(it.path()?, &hygenic)?; 1669 let path = ModPath::from_src(db.upcast(), it.path()?, &hygenic)?;
1670 if path.as_ident()?.to_string() == "derive" { 1670 if path.as_ident()?.to_string() == "derive" {
1671 Some(it) 1671 Some(it)
1672 } else { 1672 } else {
diff --git a/crates/hir/src/source_analyzer.rs b/crates/hir/src/source_analyzer.rs
index 0895bd6f1..b5c65808e 100644
--- a/crates/hir/src/source_analyzer.rs
+++ b/crates/hir/src/source_analyzer.rs
@@ -283,7 +283,7 @@ impl SourceAnalyzer {
283 283
284 // This must be a normal source file rather than macro file. 284 // This must be a normal source file rather than macro file.
285 let hygiene = Hygiene::new(db.upcast(), self.file_id); 285 let hygiene = Hygiene::new(db.upcast(), self.file_id);
286 let ctx = body::LowerCtx::with_hygiene(&hygiene); 286 let ctx = body::LowerCtx::with_hygiene(db.upcast(), &hygiene);
287 let hir_path = Path::from_src(path.clone(), &ctx)?; 287 let hir_path = Path::from_src(path.clone(), &ctx)?;
288 288
289 // Case where path is a qualifier of another path, e.g. foo::bar::Baz where we 289 // Case where path is a qualifier of another path, e.g. foo::bar::Baz where we