Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide-assists/src/handlers/generate_getter_or_setter.rs')
-rw-r--r--crates/ide-assists/src/handlers/generate_getter_or_setter.rs35
1 files changed, 33 insertions, 2 deletions
diff --git a/crates/ide-assists/src/handlers/generate_getter_or_setter.rs b/crates/ide-assists/src/handlers/generate_getter_or_setter.rs
index 51b967437b..92a654743b 100644
--- a/crates/ide-assists/src/handlers/generate_getter_or_setter.rs
+++ b/crates/ide-assists/src/handlers/generate_getter_or_setter.rs
@@ -11,7 +11,7 @@ use syntax::{
use crate::{
AssistContext, AssistId, Assists, GroupLabel,
- utils::{convert_reference_type, find_struct_impl},
+ utils::{convert_reference_type, find_struct_impl, is_selected},
};
// Assist: generate_setter
@@ -377,7 +377,7 @@ fn extract_and_parse_record_fields(
let info_of_record_fields_in_selection = ele
.fields()
.filter_map(|record_field| {
- if selection_range.contains_range(record_field.syntax().text_range()) {
+ if is_selected(&record_field, selection_range, false) {
let record_field_info = parse_record_field(record_field, assist_type)?;
field_names.push(record_field_info.fn_name.clone());
return Some(record_field_info);
@@ -948,6 +948,37 @@ impl Context {
}
#[test]
+ fn test_generate_multiple_getters_from_partial_selection() {
+ check_assist(
+ generate_getter,
+ r#"
+struct Context {
+ data$0: Data,
+ count$0: usize,
+ other: usize,
+}
+ "#,
+ r#"
+struct Context {
+ data: Data,
+ count: usize,
+ other: usize,
+}
+
+impl Context {
+ fn data(&self) -> &Data {
+ &self.data
+ }
+
+ fn $0count(&self) -> &usize {
+ &self.count
+ }
+}
+ "#,
+ );
+ }
+
+ #[test]
fn test_generate_multiple_getters_from_selection_one_already_exists() {
// As impl for one of the fields already exist, skip it
check_assist_not_applicable(