lsp_text_document/
macros.rs

1#[macro_export]
2macro_rules! position {
3    ($line:expr, $character:expr) => {{
4        Position::new($line as u32, $character as u32)
5    }};
6}
7
8#[macro_export]
9macro_rules! range_at {
10    ($doc:expr, $sub:expr) => {{
11        let index = $doc.text.find($sub).unwrap();
12        lsp_types::Range::new(
13            $doc.position_at(index as u32),
14            $doc.position_at(index as u32 + $sub.len() as u32),
15        )
16    }};
17}
18
19#[macro_export]
20macro_rules! range_after {
21    ($doc:expr, $sub:expr ) => {{
22        let index = $doc.text.find($sub).unwrap() + $sub.len();
23        lsp_types::Range::new(
24            $doc.position_at(index as u32),
25            $doc.position_at(index as u32),
26        )
27    }};
28}
29#[macro_export]
30/// an insert TextDocumentContentChangeEvent
31macro_rules! ie {
32    ($text:expr, $doc:expr, $sub_str:expr) => {
33        {
34            TextDocumentContentChangeEvent {
35                text: $text.into(),
36                range: Some(range_after!($doc, $sub_str)),
37                range_length: None,
38            }
39        }
40    };
41}
42#[macro_export]
43macro_rules! re {
44    ($text:expr, $doc:expr, $sub_str:expr) => {
45        {
46            TextDocumentContentChangeEvent {
47                text: $text.into(),
48                range: Some(range_at!($doc, $sub_str)),
49                range_length: None,
50            }
51        }
52    };
53}
54
55#[macro_export]
56macro_rules! range {
57    ($a:expr, $b:expr, $c:expr, $d:expr) => {
58        lsp_types::Range {
59            start: position!($a, $b),
60            end: position!($c, $d)
61        }
62    }
63
64}
65
66#[macro_export]
67macro_rules! event {
68    ($text:expr, $range:expr) => {
69        lsp_types::TextDocumentContentChangeEvent {
70            text: $text.to_string(),
71            range: Some($range),
72            range_length: None
73        }
74    }
75
76}