Implement SuggestionSnapshot::to_{fold,suggestion}_point
This commit is contained in:
parent
d448a5cb5c
commit
35830a0271
1 changed files with 37 additions and 0 deletions
|
@ -276,6 +276,38 @@ impl SuggestionSnapshot {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn to_fold_point(&self, point: SuggestionPoint) -> FoldPoint {
|
||||||
|
if let Some(suggestion) = self.suggestion.as_ref() {
|
||||||
|
let suggestion_start = suggestion.position.to_point(&self.fold_snapshot).0;
|
||||||
|
let suggestion_end = suggestion_start + suggestion.text.max_point();
|
||||||
|
|
||||||
|
if point.0 <= suggestion_start {
|
||||||
|
FoldPoint(point.0)
|
||||||
|
} else if point.0 > suggestion_end {
|
||||||
|
FoldPoint(suggestion_start + (point.0 - suggestion_end))
|
||||||
|
} else {
|
||||||
|
FoldPoint(suggestion_start)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
FoldPoint(point.0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn to_suggestion_point(&self, point: FoldPoint) -> SuggestionPoint {
|
||||||
|
if let Some(suggestion) = self.suggestion.as_ref() {
|
||||||
|
let suggestion_start = suggestion.position.to_point(&self.fold_snapshot).0;
|
||||||
|
|
||||||
|
if point.0 <= suggestion_start {
|
||||||
|
SuggestionPoint(point.0)
|
||||||
|
} else {
|
||||||
|
let suggestion_end = suggestion_start + suggestion.text.max_point();
|
||||||
|
SuggestionPoint(suggestion_end + (point.0 - suggestion_start))
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
SuggestionPoint(point.0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub fn line_len(&self, row: u32) -> u32 {
|
pub fn line_len(&self, row: u32) -> u32 {
|
||||||
if let Some(suggestion) = self.suggestion.as_ref() {
|
if let Some(suggestion) = self.suggestion.as_ref() {
|
||||||
let suggestion_lines = suggestion.text.max_point();
|
let suggestion_lines = suggestion.text.max_point();
|
||||||
|
@ -739,6 +771,11 @@ mod tests {
|
||||||
"invalid to_point({:?})",
|
"invalid to_point({:?})",
|
||||||
suggestion_offset
|
suggestion_offset
|
||||||
);
|
);
|
||||||
|
assert_eq!(
|
||||||
|
suggestion_snapshot
|
||||||
|
.to_suggestion_point(suggestion_snapshot.to_fold_point(suggestion_point)),
|
||||||
|
suggestion_snapshot.clip_point(suggestion_point, Bias::Left),
|
||||||
|
);
|
||||||
|
|
||||||
let mut bytes = [0; 4];
|
let mut bytes = [0; 4];
|
||||||
for byte in ch.encode_utf8(&mut bytes).as_bytes() {
|
for byte in ch.encode_utf8(&mut bytes).as_bytes() {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue