diff options
| author | Anatol Ulrich <anatol.ulrich@ferrous-systems.com> | 2021-10-27 04:46:02 +0200 |
|---|---|---|
| committer | Anatol Ulrich <anatol.ulrich@ferrous-systems.com> | 2021-10-27 04:46:02 +0200 |
| commit | f244ed6a1a99d54eac8e703df252750eac5ef954 (patch) | |
| tree | 88ad7c5f0531ad50d3b4bb6287c9b93f1f151c56 | |
| parent | 2e0610e64e7a573867eea29efcf59ae2fbad0251 (diff) | |
| download | rust-f244ed6a1a99d54eac8e703df252750eac5ef954.tar.gz rust-f244ed6a1a99d54eac8e703df252750eac5ef954.zip | |
doxx
| -rw-r--r-- | crates/ide/src/rename.rs | 15 |
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), } } |
