diff options
author | Daiki Ihara <[email protected]> | 2020-12-17 13:09:55 +0000 |
---|---|---|
committer | Daiki Ihara <[email protected]> | 2020-12-21 06:55:40 +0000 |
commit | 7a2eebde22b1013b73706a11c4a89e969c36ed2b (patch) | |
tree | ee9e1e41fb6821745b9747bfa347500945251b09 /crates/rust-analyzer/src/to_proto.rs | |
parent | 414576fb3059c8431f32a5bbe8fa117d4f3d83b7 (diff) |
Add initial_contents field for CreateFile
Diffstat (limited to 'crates/rust-analyzer/src/to_proto.rs')
-rw-r--r-- | crates/rust-analyzer/src/to_proto.rs | 37 |
1 files changed, 27 insertions, 10 deletions
diff --git a/crates/rust-analyzer/src/to_proto.rs b/crates/rust-analyzer/src/to_proto.rs index e0561b5a7..5a1ae96aa 100644 --- a/crates/rust-analyzer/src/to_proto.rs +++ b/crates/rust-analyzer/src/to_proto.rs | |||
@@ -634,30 +634,47 @@ pub(crate) fn snippet_text_document_edit( | |||
634 | Ok(lsp_ext::SnippetTextDocumentEdit { text_document, edits }) | 634 | Ok(lsp_ext::SnippetTextDocumentEdit { text_document, edits }) |
635 | } | 635 | } |
636 | 636 | ||
637 | pub(crate) fn resource_op( | 637 | pub(crate) fn snippet_text_document_ops( |
638 | snap: &GlobalStateSnapshot, | 638 | snap: &GlobalStateSnapshot, |
639 | file_system_edit: FileSystemEdit, | 639 | file_system_edit: FileSystemEdit, |
640 | ) -> lsp_types::ResourceOp { | 640 | ) -> Vec<lsp_ext::SnippetDocumentChangeOperation> { |
641 | let mut ops = Vec::new(); | ||
641 | match file_system_edit { | 642 | match file_system_edit { |
642 | FileSystemEdit::CreateFile { dst } => { | 643 | FileSystemEdit::CreateFile { dst, initial_contents } => { |
643 | let uri = snap.anchored_path(&dst); | 644 | let uri = snap.anchored_path(&dst); |
644 | lsp_types::ResourceOp::Create(lsp_types::CreateFile { | 645 | let create_file = lsp_types::ResourceOp::Create(lsp_types::CreateFile { |
645 | uri, | 646 | uri: uri.clone(), |
646 | options: None, | 647 | options: None, |
647 | annotation_id: None, | 648 | annotation_id: None, |
648 | }) | 649 | }); |
650 | ops.push(lsp_ext::SnippetDocumentChangeOperation::Op(create_file)); | ||
651 | if !initial_contents.is_empty() { | ||
652 | let text_document = | ||
653 | lsp_types::OptionalVersionedTextDocumentIdentifier { uri, version: None }; | ||
654 | let range = range(&LineIndex::new(""), TextRange::empty(TextSize::from(0))); | ||
655 | let text_edit = lsp_ext::SnippetTextEdit { | ||
656 | range, | ||
657 | new_text: initial_contents, | ||
658 | insert_text_format: Some(lsp_types::InsertTextFormat::PlainText), | ||
659 | }; | ||
660 | let edit_file = | ||
661 | lsp_ext::SnippetTextDocumentEdit { text_document, edits: vec![text_edit] }; | ||
662 | ops.push(lsp_ext::SnippetDocumentChangeOperation::Edit(edit_file)); | ||
663 | } | ||
649 | } | 664 | } |
650 | FileSystemEdit::MoveFile { src, dst } => { | 665 | FileSystemEdit::MoveFile { src, dst } => { |
651 | let old_uri = snap.file_id_to_url(src); | 666 | let old_uri = snap.file_id_to_url(src); |
652 | let new_uri = snap.anchored_path(&dst); | 667 | let new_uri = snap.anchored_path(&dst); |
653 | lsp_types::ResourceOp::Rename(lsp_types::RenameFile { | 668 | let rename_file = lsp_types::ResourceOp::Rename(lsp_types::RenameFile { |
654 | old_uri, | 669 | old_uri, |
655 | new_uri, | 670 | new_uri, |
656 | options: None, | 671 | options: None, |
657 | annotation_id: None, | 672 | annotation_id: None, |
658 | }) | 673 | }); |
674 | ops.push(lsp_ext::SnippetDocumentChangeOperation::Op(rename_file)) | ||
659 | } | 675 | } |
660 | } | 676 | } |
677 | ops | ||
661 | } | 678 | } |
662 | 679 | ||
663 | pub(crate) fn snippet_workspace_edit( | 680 | pub(crate) fn snippet_workspace_edit( |
@@ -666,8 +683,8 @@ pub(crate) fn snippet_workspace_edit( | |||
666 | ) -> Result<lsp_ext::SnippetWorkspaceEdit> { | 683 | ) -> Result<lsp_ext::SnippetWorkspaceEdit> { |
667 | let mut document_changes: Vec<lsp_ext::SnippetDocumentChangeOperation> = Vec::new(); | 684 | let mut document_changes: Vec<lsp_ext::SnippetDocumentChangeOperation> = Vec::new(); |
668 | for op in source_change.file_system_edits { | 685 | for op in source_change.file_system_edits { |
669 | let op = resource_op(&snap, op); | 686 | let ops = snippet_text_document_ops(snap, op); |
670 | document_changes.push(lsp_ext::SnippetDocumentChangeOperation::Op(op)); | 687 | document_changes.extend_from_slice(&ops); |
671 | } | 688 | } |
672 | for edit in source_change.source_file_edits { | 689 | for edit in source_change.source_file_edits { |
673 | let edit = snippet_text_document_edit(&snap, source_change.is_snippet, edit)?; | 690 | let edit = snippet_text_document_edit(&snap, source_change.is_snippet, edit)?; |