aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksey Kladov <[email protected]>2021-06-12 15:49:41 +0100
committerAleksey Kladov <[email protected]>2021-06-12 15:49:41 +0100
commit6f0141a14026827edfe4ef046013001acd22d94d (patch)
treeb3302438048c38379027e536470e5ea0d363f8a9
parent1b1e3de988ed835b9469360d584963684d1c8ff6 (diff)
minor: optimize
We shouldn't be looking at the source map unless we actually have diagnostics.
-rw-r--r--Cargo.lock1
-rw-r--r--crates/hir/Cargo.toml1
-rw-r--r--crates/hir/src/lib.rs7
3 files changed, 6 insertions, 3 deletions
diff --git a/Cargo.lock b/Cargo.lock
index e1d2a74f0..0ffc91548 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -482,6 +482,7 @@ dependencies = [
482 "hir_ty", 482 "hir_ty",
483 "itertools", 483 "itertools",
484 "log", 484 "log",
485 "once_cell",
485 "profile", 486 "profile",
486 "rustc-hash", 487 "rustc-hash",
487 "smallvec", 488 "smallvec",
diff --git a/crates/hir/Cargo.toml b/crates/hir/Cargo.toml
index 560b15238..7c148fd40 100644
--- a/crates/hir/Cargo.toml
+++ b/crates/hir/Cargo.toml
@@ -16,6 +16,7 @@ either = "1.5.3"
16arrayvec = "0.7" 16arrayvec = "0.7"
17itertools = "0.10.0" 17itertools = "0.10.0"
18smallvec = "1.4.0" 18smallvec = "1.4.0"
19once_cell = "1"
19 20
20stdx = { path = "../stdx", version = "0.0.0" } 21stdx = { path = "../stdx", version = "0.0.0" }
21syntax = { path = "../syntax", version = "0.0.0" } 22syntax = { path = "../syntax", version = "0.0.0" }
diff --git a/crates/hir/src/lib.rs b/crates/hir/src/lib.rs
index a21a9da21..8804e63c5 100644
--- a/crates/hir/src/lib.rs
+++ b/crates/hir/src/lib.rs
@@ -73,6 +73,7 @@ use hir_ty::{
73}; 73};
74use itertools::Itertools; 74use itertools::Itertools;
75use nameres::diagnostics::DefDiagnosticKind; 75use nameres::diagnostics::DefDiagnosticKind;
76use once_cell::unsync::Lazy;
76use rustc_hash::FxHashSet; 77use rustc_hash::FxHashSet;
77use stdx::{format_to, impl_from}; 78use stdx::{format_to, impl_from};
78use syntax::{ 79use syntax::{
@@ -1044,7 +1045,7 @@ impl Function {
1044 } 1045 }
1045 1046
1046 let infer = db.infer(self.id.into()); 1047 let infer = db.infer(self.id.into());
1047 let (_, source_map) = db.body_with_source_map(self.id.into()); 1048 let source_map = Lazy::new(|| db.body_with_source_map(self.id.into()).1);
1048 for d in &infer.diagnostics { 1049 for d in &infer.diagnostics {
1049 match d { 1050 match d {
1050 hir_ty::InferenceDiagnostic::NoSuchField { expr } => { 1051 hir_ty::InferenceDiagnostic::NoSuchField { expr } => {
@@ -1061,13 +1062,13 @@ impl Function {
1061 } 1062 }
1062 1063
1063 for expr in hir_ty::diagnostics::missing_unsafe(db, self.id.into()) { 1064 for expr in hir_ty::diagnostics::missing_unsafe(db, self.id.into()) {
1064 match source_map.as_ref().expr_syntax(expr) { 1065 match source_map.expr_syntax(expr) {
1065 Ok(in_file) => { 1066 Ok(in_file) => {
1066 sink.push(MissingUnsafe { file: in_file.file_id, expr: in_file.value }) 1067 sink.push(MissingUnsafe { file: in_file.file_id, expr: in_file.value })
1067 } 1068 }
1068 Err(SyntheticSyntax) => { 1069 Err(SyntheticSyntax) => {
1069 // FIXME: The `expr` was desugared, report or assert that 1070 // FIXME: The `expr` was desugared, report or assert that
1070 // this dosen't happen. 1071 // this doesn't happen.
1071 } 1072 }
1072 } 1073 }
1073 } 1074 }