solidhunter_lib/types/
range.rs

1use super::Position;
2use serde::{Deserialize, Serialize};
3
4#[derive(Clone, Serialize, Deserialize, Debug)]
5pub struct Range {
6    pub start: Position,
7    pub end: Position,
8}
9
10impl Range {
11    // Compute the number of characters between the start and end of the range
12    pub fn compute_length(&self, content: &str) -> usize {
13        if self.start.line == self.end.line {
14            self.end.character - self.start.character
15        } else {
16            let mut length = 0;
17            let mut line = self.start.line;
18            let mut character = self.start.character;
19            while line < self.end.line {
20                let line_content = content.lines().nth(line - 1).unwrap();
21                length += line_content.len() + 1 - character;
22                line += 1;
23                character = 0;
24            }
25            length += self.end.character - character;
26            length
27        }
28    }
29}