From 3ab328b49a5a4fc47d81ea390b1d42f67ca3c018 Mon Sep 17 00:00:00 2001 From: Bernardo Date: Thu, 3 Jan 2019 14:14:36 +0100 Subject: use lsp WorkspaceEdit instead of custom source_file_edits and file_system_edits --- crates/ra_lsp_server/src/conv.rs | 51 ++++++++++++++++++++++++++-------------- crates/ra_lsp_server/src/req.rs | 22 +++-------------- 2 files changed, 37 insertions(+), 36 deletions(-) (limited to 'crates/ra_lsp_server/src') diff --git a/crates/ra_lsp_server/src/conv.rs b/crates/ra_lsp_server/src/conv.rs index 1107ffc8b..7230fb101 100644 --- a/crates/ra_lsp_server/src/conv.rs +++ b/crates/ra_lsp_server/src/conv.rs @@ -1,11 +1,16 @@ use languageserver_types::{ - self, Location, Position, Range, SymbolKind, TextDocumentEdit, TextDocumentIdentifier, - TextDocumentItem, TextDocumentPositionParams, Url, VersionedTextDocumentIdentifier, InsertTextFormat, + self, CreateFile, DocumentChangeOperation, DocumentChanges, InsertTextFormat, Location, + Position, Range, RenameFile, ResourceOp, SymbolKind, TextDocumentEdit, TextDocumentIdentifier, + TextDocumentItem, TextDocumentPositionParams, Url, VersionedTextDocumentIdentifier, + WorkspaceEdit, }; -use ra_analysis::{FileId, FileSystemEdit, SourceChange, SourceFileEdit, FilePosition,FileRange, CompletionItem, CompletionItemKind, InsertText, NavigationTarget}; -use ra_editor::{LineCol, LineIndex, translate_offset_with_edit}; -use ra_text_edit::{AtomTextEdit, TextEdit}; +use ra_analysis::{ + CompletionItem, CompletionItemKind, FileId, FilePosition, FileRange, FileSystemEdit, + InsertText, NavigationTarget, SourceChange, SourceFileEdit, +}; +use ra_editor::{translate_offset_with_edit, LineCol, LineIndex}; use ra_syntax::{SyntaxKind, TextRange, TextUnit}; +use ra_text_edit::{AtomTextEdit, TextEdit}; use crate::{req, server_world::ServerWorld, Result}; @@ -49,7 +54,7 @@ impl Conv for CompletionItemKind { type Output = ::languageserver_types::CompletionItemKind; fn conv(self) -> ::Output { - use ::languageserver_types::CompletionItemKind::*; + use languageserver_types::CompletionItemKind::*; match self { CompletionItemKind::Keyword => Keyword, CompletionItemKind::Snippet => Snippet, @@ -266,12 +271,20 @@ impl TryConvWith for SourceChange { }) } }; - let source_file_edits = self.source_file_edits.try_conv_with(world)?; - let file_system_edits = self.file_system_edits.try_conv_with(world)?; + let mut document_changes: Vec = Vec::new(); + for resource_op in self.file_system_edits.try_conv_with(world)? { + document_changes.push(DocumentChangeOperation::Op(resource_op)); + } + for text_document_edit in self.source_file_edits.try_conv_with(world)? { + document_changes.push(DocumentChangeOperation::Edit(text_document_edit)); + } + let workspace_edit = WorkspaceEdit { + changes: None, + document_changes: Some(DocumentChanges::Operations(document_changes)), + }; Ok(req::SourceChange { label: self.label, - source_file_edits, - file_system_edits, + workspace_edit, cursor_position, }) } @@ -301,21 +314,25 @@ impl TryConvWith for SourceFileEdit { impl TryConvWith for FileSystemEdit { type Ctx = ServerWorld; - type Output = req::FileSystemEdit; - fn try_conv_with(self, world: &ServerWorld) -> Result { + type Output = ResourceOp; + fn try_conv_with(self, world: &ServerWorld) -> Result { let res = match self { FileSystemEdit::CreateFile { source_root, path } => { - let uri = world.path_to_uri(source_root, &path)?; - req::FileSystemEdit::CreateFile { uri } + let uri = world.path_to_uri(source_root, &path)?.to_string(); + ResourceOp::Create(CreateFile { uri, options: None }) } FileSystemEdit::MoveFile { src, dst_source_root, dst_path, } => { - let src = world.file_id_to_uri(src)?; - let dst = world.path_to_uri(dst_source_root, &dst_path)?; - req::FileSystemEdit::MoveFile { src, dst } + let old_uri = world.file_id_to_uri(src)?.to_string(); + let new_uri = world.path_to_uri(dst_source_root, &dst_path)?.to_string(); + ResourceOp::Rename(RenameFile { + old_uri, + new_uri, + options: None, + }) } }; Ok(res) diff --git a/crates/ra_lsp_server/src/req.rs b/crates/ra_lsp_server/src/req.rs index 747ab8a8c..b41e90328 100644 --- a/crates/ra_lsp_server/src/req.rs +++ b/crates/ra_lsp_server/src/req.rs @@ -1,6 +1,6 @@ -use serde::{Serialize, Deserialize}; use languageserver_types::{Location, Position, Range, TextDocumentIdentifier, Url}; use rustc_hash::FxHashMap; +use serde::{Deserialize, Serialize}; use url_serde; pub use languageserver_types::{ @@ -8,7 +8,7 @@ pub use languageserver_types::{ CompletionResponse, DocumentOnTypeFormattingParams, DocumentSymbolParams, DocumentSymbolResponse, ExecuteCommandParams, Hover, InitializeResult, PublishDiagnosticsParams, ReferenceParams, SignatureHelp, TextDocumentEdit, - TextDocumentPositionParams, TextEdit, WorkspaceSymbolParams, + TextDocumentPositionParams, TextEdit, WorkspaceEdit, WorkspaceSymbolParams, }; pub enum SyntaxTree {} @@ -151,26 +151,10 @@ pub struct Runnable { #[serde(rename_all = "camelCase")] pub struct SourceChange { pub label: String, - pub source_file_edits: Vec, - pub file_system_edits: Vec, + pub workspace_edit: WorkspaceEdit, pub cursor_position: Option, } -#[derive(Serialize, Debug)] -#[serde(tag = "type", rename_all = "camelCase")] -pub enum FileSystemEdit { - CreateFile { - #[serde(with = "url_serde")] - uri: Url, - }, - MoveFile { - #[serde(with = "url_serde")] - src: Url, - #[serde(with = "url_serde")] - dst: Url, - }, -} - pub enum InternalFeedback {} impl Notification for InternalFeedback { -- cgit v1.2.3