//! This modules defines type to represent changes to the source code, that flow //! from the server to the client. //! //! It can be viewed as a dual for `AnalysisChange`. use base_db::{AnchoredPathBuf, FileId}; use text_edit::TextEdit; #[derive(Default, Debug, Clone)] pub struct SourceChange { pub source_file_edits: Vec, pub file_system_edits: Vec, pub is_snippet: bool, } impl SourceChange { /// Creates a new SourceChange with the given label /// from the edits. pub fn from_edits( source_file_edits: Vec, file_system_edits: Vec, ) -> Self { SourceChange { source_file_edits, file_system_edits, is_snippet: false } } } #[derive(Debug, Clone)] pub struct SourceFileEdit { pub file_id: FileId, pub edit: TextEdit, } impl From for SourceChange { fn from(edit: SourceFileEdit) -> SourceChange { vec![edit].into() } } impl From> for SourceChange { fn from(source_file_edits: Vec) -> SourceChange { SourceChange { source_file_edits, file_system_edits: Vec::new(), is_snippet: false } } } #[derive(Debug, Clone)] pub enum FileSystemEdit { CreateFile { dst: AnchoredPathBuf, initial_contents: String }, MoveFile { src: FileId, dst: AnchoredPathBuf }, } impl From for SourceChange { fn from(edit: FileSystemEdit) -> SourceChange { SourceChange { source_file_edits: Vec::new(), file_system_edits: vec![edit], is_snippet: false, } } }