From b5b44659a42cf982590519317ede9ead354f9c4e Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Fri, 21 Dec 2018 12:18:14 +0300 Subject: edits use source-root API --- crates/ra_analysis/src/imp.rs | 10 ++++++---- crates/ra_analysis/src/lib.rs | 7 ++++--- crates/ra_lsp_server/src/conv.rs | 17 +++++++++-------- crates/ra_lsp_server/src/server_world.rs | 10 +++++++++- 4 files changed, 28 insertions(+), 16 deletions(-) diff --git a/crates/ra_analysis/src/imp.rs b/crates/ra_analysis/src/imp.rs index a7be56f5a..5701e1ae2 100644 --- a/crates/ra_analysis/src/imp.rs +++ b/crates/ra_analysis/src/imp.rs @@ -368,10 +368,11 @@ impl AnalysisImpl { .collect::>(); if let Some(m) = source_binder::module_from_file_id(&*self.db, file_id)? { for (name_node, problem) in m.problems(&*self.db) { + let source_root = self.db.file_source_root(file_id); let diag = match problem { Problem::UnresolvedModule { candidate } => { let create_file = FileSystemEdit::CreateFile { - anchor: file_id, + source_root, path: candidate.clone(), }; let fix = SourceChange { @@ -388,11 +389,12 @@ impl AnalysisImpl { } Problem::NotDirOwner { move_to, candidate } => { let move_file = FileSystemEdit::MoveFile { - file: file_id, - path: move_to.clone(), + src: file_id, + dst_source_root: source_root, + dst_path: move_to.clone(), }; let create_file = FileSystemEdit::CreateFile { - anchor: file_id, + source_root, path: move_to.join(candidate), }; let fix = SourceChange { diff --git a/crates/ra_analysis/src/lib.rs b/crates/ra_analysis/src/lib.rs index 2fb11365c..c7e7dc1c0 100644 --- a/crates/ra_analysis/src/lib.rs +++ b/crates/ra_analysis/src/lib.rs @@ -173,12 +173,13 @@ pub struct SourceFileEdit { #[derive(Debug)] pub enum FileSystemEdit { CreateFile { - anchor: FileId, + source_root: SourceRootId, path: RelativePathBuf, }, MoveFile { - file: FileId, - path: RelativePathBuf, + src: FileId, + dst_source_root: SourceRootId, + dst_path: RelativePathBuf, }, } diff --git a/crates/ra_lsp_server/src/conv.rs b/crates/ra_lsp_server/src/conv.rs index 3531b727e..218ded4ee 100644 --- a/crates/ra_lsp_server/src/conv.rs +++ b/crates/ra_lsp_server/src/conv.rs @@ -283,16 +283,17 @@ impl TryConvWith for FileSystemEdit { type Output = req::FileSystemEdit; fn try_conv_with(self, world: &ServerWorld) -> Result { let res = match self { - FileSystemEdit::CreateFile { anchor, path } => { - let uri = world.file_id_to_uri(anchor)?; - let path = &path.as_str()[3..]; // strip `../` b/c url is weird - let uri = uri.join(path)?; + FileSystemEdit::CreateFile { source_root, path } => { + let uri = world.path_to_uri(source_root, &path)?; req::FileSystemEdit::CreateFile { uri } } - FileSystemEdit::MoveFile { file, path } => { - let src = world.file_id_to_uri(file)?; - let path = &path.as_str()[3..]; // strip `../` b/c url is weird - let dst = src.join(path)?; + 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 } } }; diff --git a/crates/ra_lsp_server/src/server_world.rs b/crates/ra_lsp_server/src/server_world.rs index 785877c4b..73cccc9dd 100644 --- a/crates/ra_lsp_server/src/server_world.rs +++ b/crates/ra_lsp_server/src/server_world.rs @@ -8,7 +8,7 @@ use ra_analysis::{ Analysis, AnalysisChange, AnalysisHost, CrateGraph, FileId, LibraryData, SourceRootId }; -use ra_vfs::{Vfs, VfsChange, VfsFile}; +use ra_vfs::{Vfs, VfsChange, VfsFile, VfsRoot}; use rustc_hash::FxHashMap; use relative_path::RelativePathBuf; use parking_lot::RwLock; @@ -183,4 +183,12 @@ impl ServerWorld { .map_err(|_| format_err!("can't convert path to url: {}", path.display()))?; Ok(url) } + + pub fn path_to_uri(&self, root: SourceRootId, path: &RelativePathBuf) -> Result { + let base = self.vfs.read().root2path(VfsRoot(root.0)); + let path = path.to_path(base); + let url = Url::from_file_path(&path) + .map_err(|_| format_err!("can't convert path to url: {}", path.display()))?; + Ok(url) + } } -- cgit v1.2.3