Skip to content

Commit 9e6bff7

Browse files
committed
fix some test due to resolve to where trait m impl
1 parent 6ecabe3 commit 9e6bff7

File tree

4 files changed

+41
-35
lines changed

4 files changed

+41
-35
lines changed

crates/ide-assists/src/handlers/qualify_method_call.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -281,7 +281,7 @@ use test_mod::*;
281281
282282
fn main() {
283283
let test_struct = test_mod::TestStruct {};
284-
TestTrait::test_method(&test_struct)
284+
TestStruct::test_method(&test_struct)
285285
}
286286
"#,
287287
);
@@ -324,7 +324,7 @@ use test_mod::*;
324324
325325
fn main() {
326326
let test_struct = test_mod::TestStruct {};
327-
TestTrait::test_method(&test_struct, 12, 32u)
327+
TestStruct::test_method(&test_struct, 12, 32u)
328328
}
329329
"#,
330330
);
@@ -367,7 +367,7 @@ use test_mod::*;
367367
368368
fn main() {
369369
let test_struct = test_mod::TestStruct {};
370-
TestTrait::test_method(test_struct, 12, 32u)
370+
TestStruct::test_method(test_struct, 12, 32u)
371371
}
372372
"#,
373373
);
@@ -410,7 +410,7 @@ use test_mod::*;
410410
411411
fn main() {
412412
let test_struct = test_mod::TestStruct {};
413-
TestTrait::test_method(&mut test_struct, 12, 32u)
413+
TestStruct::test_method(&mut test_struct, 12, 32u)
414414
}
415415
"#,
416416
);
@@ -480,7 +480,7 @@ use test_mod::*;
480480
481481
fn main() {
482482
let test_struct = TestStruct {};
483-
TestTrait::test_method::<()>(&test_struct)
483+
TestStruct::test_method::<()>(&test_struct)
484484
}
485485
"#,
486486
);

crates/ide-db/src/rename.rs

Lines changed: 32 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -244,7 +244,7 @@ fn rename_mod(
244244

245245
fn rename_reference(
246246
sema: &Semantics<RootDatabase>,
247-
mut def: Definition,
247+
def: Definition,
248248
new_name: &str,
249249
) -> Result<SourceChange> {
250250
let ident_kind = IdentifierKind::classify(new_name)?;
@@ -271,15 +271,43 @@ fn rename_reference(
271271
}
272272
}
273273

274+
let def = convert_to_trait_def(def, sema);
275+
let usages = def.usages(sema).all();
276+
277+
if !usages.is_empty() && ident_kind == IdentifierKind::Underscore {
278+
cov_mark::hit!(rename_underscore_multiple);
279+
bail!("Cannot rename reference to `_` as it is being referenced multiple times");
280+
}
281+
let mut source_change = SourceChange::default();
282+
source_change.extend(usages.iter().map(|(&file_id, references)| {
283+
(file_id, source_edit_from_references(references, def, new_name))
284+
}));
285+
286+
let mut insert_def_edit = |def| {
287+
let (file_id, edit) = source_edit_from_def(sema, def, new_name)?;
288+
source_change.insert_source_edit(file_id, edit);
289+
Ok(())
290+
};
291+
match def {
292+
Definition::Local(l) => l
293+
.associated_locals(sema.db)
294+
.iter()
295+
.try_for_each(|&local| insert_def_edit(Definition::Local(local))),
296+
def => insert_def_edit(def),
297+
}?;
298+
Ok(source_change)
299+
}
300+
301+
pub(crate) fn convert_to_trait_def(def: Definition, sema: &Semantics<RootDatabase>) -> Definition {
302+
// HACK: resolve trait impl items to the item def of the trait definition
303+
// so that we properly resolve all trait item references
274304
let assoc_item = match def {
275-
// HACK: resolve trait impl items to the item def of the trait definition
276-
// so that we properly resolve all trait item references
277305
Definition::Function(it) => it.as_assoc_item(sema.db),
278306
Definition::TypeAlias(it) => it.as_assoc_item(sema.db),
279307
Definition::Const(it) => it.as_assoc_item(sema.db),
280308
_ => None,
281309
};
282-
def = match assoc_item {
310+
match assoc_item {
283311
Some(assoc) => assoc
284312
.containing_trait_impl(sema.db)
285313
.and_then(|trait_| {
@@ -305,31 +333,7 @@ fn rename_reference(
305333
})
306334
.unwrap_or(def),
307335
None => def,
308-
};
309-
let usages = def.usages(sema).all();
310-
311-
if !usages.is_empty() && ident_kind == IdentifierKind::Underscore {
312-
cov_mark::hit!(rename_underscore_multiple);
313-
bail!("Cannot rename reference to `_` as it is being referenced multiple times");
314336
}
315-
let mut source_change = SourceChange::default();
316-
source_change.extend(usages.iter().map(|(&file_id, references)| {
317-
(file_id, source_edit_from_references(references, def, new_name))
318-
}));
319-
320-
let mut insert_def_edit = |def| {
321-
let (file_id, edit) = source_edit_from_def(sema, def, new_name)?;
322-
source_change.insert_source_edit(file_id, edit);
323-
Ok(())
324-
};
325-
match def {
326-
Definition::Local(l) => l
327-
.associated_locals(sema.db)
328-
.iter()
329-
.try_for_each(|&local| insert_def_edit(Definition::Local(local))),
330-
def => insert_def_edit(def),
331-
}?;
332-
Ok(source_change)
333337
}
334338

335339
pub fn source_edit_from_references(

crates/ide-db/src/search.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -619,7 +619,9 @@ impl<'a> FindUsages<'a> {
619619
};
620620
sink(file_id, reference)
621621
}
622-
Some(NameRefClass::Definition(def)) if def == self.def => {
622+
Some(NameRefClass::Definition(def))
623+
if crate::rename::convert_to_trait_def(def, self.sema) == self.def =>
624+
{
623625
let FileRange { file_id, range } = self.sema.original_range(name_ref.syntax());
624626
let reference = FileReference {
625627
range,

crates/ide/src/syntax_highlighting/test_data/highlight_unsafe.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,6 @@
121121
<span class="keyword">let</span> <span class="struct">Packed</span> <span class="brace">{</span> <span class="field">a</span><span class="colon">:</span> <span class="keyword unsafe">ref</span> <span class="variable declaration reference">_a</span> <span class="brace">}</span> <span class="operator">=</span> <span class="variable">packed</span><span class="semicolon">;</span>
122122

123123
<span class="comment">// unsafe auto ref of packed field</span>
124-
<span class="variable">packed</span><span class="operator">.</span><span class="field">a</span><span class="operator">.</span><span class="function associated reference trait unsafe">calls_autoref</span><span class="parenthesis">(</span><span class="parenthesis">)</span><span class="semicolon">;</span>
124+
<span class="variable">packed</span><span class="operator">.</span><span class="field">a</span><span class="operator">.</span><span class="function associated reference unsafe">calls_autoref</span><span class="parenthesis">(</span><span class="parenthesis">)</span><span class="semicolon">;</span>
125125
<span class="brace">}</span>
126126
<span class="brace">}</span></code></pre>

0 commit comments

Comments
 (0)