Simplify old_state handling.

This commit is contained in:
Blaž Hrastnik 2020-10-23 11:36:46 +09:00
parent c0e17dd324
commit efc5aa2016
3 changed files with 4 additions and 9 deletions

View file

@ -4,6 +4,7 @@ use crate::{ChangeSet, Diagnostic, Position, Range, Rope, RopeSlice, Selection,
use anyhow::Error;
/// A state represents the current editor state of a single buffer.
#[derive(Clone)]
pub struct State {
// TODO: fields should be private but we need to refactor commands.rs first
pub doc: Rope,

View file

@ -411,15 +411,9 @@ fn append_changes_to_history(view: &mut View) {
// TODO: trigger lsp/documentDidChange with changes
// HAXX: we need to reconstruct the state as it was before the changes..
let (doc, selection) = view.doc.old_state.take().unwrap();
let mut old_state = State::new(doc);
old_state.selection = selection;
let old_state = std::mem::replace(&mut view.doc.old_state, view.doc.state.clone());
// TODO: take transaction by value?
view.doc.history.commit_revision(&transaction, &old_state);
// HAXX
view.doc.old_state = Some((view.doc.text().clone(), view.doc.state.selection.clone()));
}
pub fn normal_mode(view: &mut View, _count: usize) {

View file

@ -27,9 +27,9 @@ pub struct Document {
/// Pending changes since last history commit.
pub changes: ChangeSet,
pub old_state: State,
pub history: History,
pub version: i64, // should be usize?
pub old_state: Option<(Rope, Selection)>,
pub diagnostics: Vec<Diagnostic>,
}
@ -55,7 +55,7 @@ use url::Url;
impl Document {
fn new(state: State) -> Self {
let changes = ChangeSet::new(&state.doc);
let old_state = Some((state.doc.clone(), Selection::single(0, 0)));
let old_state = state.clone();
Self {
path: None,