aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_editor/src/folding_ranges.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_editor/src/folding_ranges.rs')
-rw-r--r--crates/ra_editor/src/folding_ranges.rs56
1 files changed, 56 insertions, 0 deletions
diff --git a/crates/ra_editor/src/folding_ranges.rs b/crates/ra_editor/src/folding_ranges.rs
index 4518e8d24..817da28d1 100644
--- a/crates/ra_editor/src/folding_ranges.rs
+++ b/crates/ra_editor/src/folding_ranges.rs
@@ -6,11 +6,13 @@ use ra_syntax::{
6 algo::{walk, Direction, siblings}, 6 algo::{walk, Direction, siblings},
7}; 7};
8 8
9#[derive(Debug, PartialEq, Eq)]
9pub enum FoldKind { 10pub enum FoldKind {
10 Comment, 11 Comment,
11 Imports, 12 Imports,
12} 13}
13 14
15#[derive(Debug)]
14pub struct Fold { 16pub struct Fold {
15 pub range: TextRange, 17 pub range: TextRange,
16 pub kind: FoldKind, 18 pub kind: FoldKind,
@@ -83,4 +85,58 @@ fn contiguous_range_for<'a>(
83 } else { 85 } else {
84 None 86 None
85 } 87 }
88}
89
90#[cfg(test)]
91mod tests {
92 use super::*;
93
94 #[test]
95 fn test_fold_comments() {
96 let text = r#"
97// Hello
98// this is a multiline
99// comment
100//
101
102// But this is not
103
104fn main() {
105 // We should
106 // also
107 // fold
108 // this one.
109}"#;
110
111 let file = File::parse(&text);
112 let folds = folding_ranges(&file);
113 assert_eq!(folds.len(), 2);
114 assert_eq!(folds[0].range.start(), 1.into());
115 assert_eq!(folds[0].range.end(), 46.into());
116 assert_eq!(folds[0].kind, FoldKind::Comment);
117
118 assert_eq!(folds[1].range.start(), 84.into());
119 assert_eq!(folds[1].range.end(), 137.into());
120 assert_eq!(folds[1].kind, FoldKind::Comment);
121 }
122
123 #[test]
124 fn test_fold_imports() {
125 let text = r#"
126use std::str;
127use std::vec;
128use std::io as iop;
129
130fn main() {
131}"#;
132
133 let file = File::parse(&text);
134 let folds = folding_ranges(&file);
135 assert_eq!(folds.len(), 1);
136 assert_eq!(folds[0].range.start(), 1.into());
137 assert_eq!(folds[0].range.end(), 48.into());
138 assert_eq!(folds[0].kind, FoldKind::Imports);
139 }
140
141
86} \ No newline at end of file 142} \ No newline at end of file