about summary refs log tree commit diff
diff options
context:
space:
mode:
authorAnatol Ulrich <anatol.ulrich@ferrous-systems.com>2021-10-27 04:46:02 +0200
committerAnatol Ulrich <anatol.ulrich@ferrous-systems.com>2021-10-27 04:46:02 +0200
commitf244ed6a1a99d54eac8e703df252750eac5ef954 (patch)
tree88ad7c5f0531ad50d3b4bb6287c9b93f1f151c56
parent2e0610e64e7a573867eea29efcf59ae2fbad0251 (diff)
downloadrust-f244ed6a1a99d54eac8e703df252750eac5ef954.tar.gz
rust-f244ed6a1a99d54eac8e703df252750eac5ef954.zip
doxx
-rw-r--r--crates/ide/src/rename.rs15
1 files changed, 11 insertions, 4 deletions
diff --git a/crates/ide/src/rename.rs b/crates/ide/src/rename.rs
index 51f6b5d133f..bb23699cad4 100644
--- a/crates/ide/src/rename.rs
+++ b/crates/ide/src/rename.rs
@@ -36,10 +36,11 @@ pub(crate) fn prepare_rename(
     let mut defs = find_definitions(&sema, syntax, position)?;
 
     // TODO:
-    // - is "No references found at position" the right error? (why does it not get caught by `find_definitions`... hmm)
+    // - `find_definitions` is implemented so that it returns a non-empty vec
+    //   in the `Ok` case. But that's not expressed by the type signature, hence `unwrap()`
+    //   here which ... wart.
     // - is "just take the first `name_like`" correct? If not, what do?
-    let (name_like, _def) =
-        defs.next().ok_or_else(|| format_err!("No references found at position"))?;
+    let (name_like, _def) = defs.next().unwrap();
     let frange = sema.original_range(name_like.syntax());
     always!(frange.range.contains_inclusive(position.offset) && frange.file_id == position.file_id);
     Ok(RangeInfo::new(frange.range, ()))
@@ -168,7 +169,13 @@ fn find_definitions(
     match v {
         // remove duplicates
         // TODO is "unique by `Definition`" correct?
-        Ok(v) => Ok(v.into_iter().unique_by(|t| t.1)),
+        Ok(v) => {
+            if v.is_empty() {
+                Err(format_err!("No references found at position"))
+            } else {
+                Ok(v.into_iter().unique_by(|t| t.1))
+            }
+        }
         Err(e) => Err(e),
     }
 }