MCPcopy Create free account
hub / github.com/bytesnake/vim-graphical-preview / set_folds

Method set_folds

src/render.rs:286–333  ·  view source on GitHub ↗
(&mut self, folds: &str)

Source from the content-addressed store, hash-verified

284 }
285
286 pub fn set_folds(&mut self, folds: &str) -> Result<usize> {
287 let folds: Folds = json::from_str(folds).unwrap();
288 let mut folds = folds.into_iter();
289
290 let mut any_changed = false;
291
292 // loop through structs and update fold information
293 let mut end_fold: Option<usize> = None;
294 for (line, elm) in &mut self.strcts {
295 if let Some(tmp) = &end_fold {
296 if tmp < line {
297 end_fold = None;
298 }
299 }
300
301 match elm {
302 FoldInner::Fold(ref mut fold) => {
303 let (start, end) = folds.next().unwrap();
304 assert!(*line == start);
305
306 let prev = fold.state.clone();
307
308 if end == -1 {
309 fold.state = FoldState::Open;
310 } else {
311 fold.state = FoldState::Folded(end as usize);
312
313 if prev == FoldState::Open {
314 end_fold = Some(end as usize);
315 }
316 }
317
318 if prev != fold.state {
319 any_changed = true;
320 }
321 },
322 FoldInner::Node((_, ref mut view)) => {
323 if let Some(tmp) = &end_fold {
324 if line < tmp {
325 *view = NodeView::Hidden;
326 }
327 }
328 }
329 }
330 }
331
332 Ok(if any_changed { 1 } else { 0 })
333 }
334}

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected