Skip to content

Commit 43f9752

Browse files
committed
feat: can rename identifier
1 parent 29cb0a4 commit 43f9752

File tree

4 files changed

+45
-5
lines changed

4 files changed

+45
-5
lines changed

src/parser/input/test_can_rename.proto

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,9 @@ message Book {
1313
string name = 1;
1414
string country = 2;
1515
};
16+
17+
}
18+
19+
message Outer {
20+
Book.Author a = 1;
1621
}

src/parser/rename.rs

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,15 @@ impl ParsedTree {
1010
pub fn can_rename(&self, pos: &Position) -> Option<Range> {
1111
self.get_node_at_position(pos)
1212
.filter(NodeKind::is_identifier)
13-
.map(|n| n.parent().unwrap()) // Safety: Identifier must have a parent node
14-
.filter(NodeKind::is_actionable)
15-
.map(|n| Range {
16-
start: ts_to_lsp_position(&n.start_position()),
17-
end: ts_to_lsp_position(&n.end_position()),
13+
.and_then(|n| {
14+
if n.parent().is_some() && NodeKind::is_actionable(&n.parent().unwrap()) {
15+
Some(Range {
16+
start: ts_to_lsp_position(&n.start_position()),
17+
end: ts_to_lsp_position(&n.end_position()),
18+
})
19+
} else {
20+
None
21+
}
1822
})
1923
}
2024

@@ -100,12 +104,23 @@ mod test {
100104
line: 2,
101105
character: 2,
102106
};
107+
let pos_inner_type = Position {
108+
line: 19,
109+
character: 11,
110+
};
111+
let pos_outer_type = Position {
112+
line: 19,
113+
character: 5,
114+
};
115+
103116
let contents = include_str!("input/test_can_rename.proto");
104117
let parsed = ProtoParser::new().parse(uri.clone(), contents);
105118
assert!(parsed.is_some());
106119

107120
let tree = parsed.unwrap();
108121
assert_yaml_snapshot!(tree.can_rename(&pos_rename));
109122
assert_yaml_snapshot!(tree.can_rename(&pos_non_rename));
123+
assert_yaml_snapshot!(tree.can_rename(&pos_inner_type));
124+
assert_yaml_snapshot!(tree.can_rename(&pos_outer_type));
110125
}
111126
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
---
2+
source: src/parser/rename.rs
3+
expression: tree.can_rename(&pos_inner_type)
4+
---
5+
start:
6+
line: 19
7+
character: 9
8+
end:
9+
line: 19
10+
character: 15
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
---
2+
source: src/parser/rename.rs
3+
expression: tree.can_rename(&pos_outer_type)
4+
---
5+
start:
6+
line: 19
7+
character: 4
8+
end:
9+
line: 19
10+
character: 8

0 commit comments

Comments
 (0)