From 97927146dbdcd17a1569f0bb8a4b56fcf347f03c Mon Sep 17 00:00:00 2001 From: kjeremy Date: Tue, 21 Jul 2020 14:07:42 -0400 Subject: Store document version and pass back to the client --- crates/rust-analyzer/src/global_state.rs | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) (limited to 'crates/rust-analyzer/src/global_state.rs') diff --git a/crates/rust-analyzer/src/global_state.rs b/crates/rust-analyzer/src/global_state.rs index 94973b90a..80937dbc4 100644 --- a/crates/rust-analyzer/src/global_state.rs +++ b/crates/rust-analyzer/src/global_state.rs @@ -12,7 +12,7 @@ use parking_lot::RwLock; use ra_db::{CrateId, VfsPath}; use ra_ide::{Analysis, AnalysisChange, AnalysisHost, FileId}; use ra_project_model::{CargoWorkspace, ProcMacroClient, ProjectWorkspace, Target}; -use rustc_hash::{FxHashMap, FxHashSet}; +use rustc_hash::FxHashMap; use crate::{ config::Config, @@ -69,7 +69,7 @@ pub(crate) struct GlobalState { pub(crate) config: Config, pub(crate) analysis_host: AnalysisHost, pub(crate) diagnostics: DiagnosticCollection, - pub(crate) mem_docs: FxHashSet, + pub(crate) mem_docs: FxHashMap>, pub(crate) vfs: Arc)>>, pub(crate) status: Status, pub(crate) source_root_config: SourceRootConfig, @@ -84,6 +84,7 @@ pub(crate) struct GlobalStateSnapshot { pub(crate) analysis: Analysis, pub(crate) check_fixes: CheckFixes, pub(crate) latest_requests: Arc>, + mem_docs: FxHashMap>, vfs: Arc)>>, pub(crate) workspaces: Arc>, } @@ -117,7 +118,7 @@ impl GlobalState { config, analysis_host, diagnostics: Default::default(), - mem_docs: FxHashSet::default(), + mem_docs: FxHashMap::default(), vfs: Arc::new(RwLock::new((vfs::Vfs::default(), FxHashMap::default()))), status: Status::default(), source_root_config: SourceRootConfig::default(), @@ -183,6 +184,7 @@ impl GlobalState { vfs: Arc::clone(&self.vfs), latest_requests: Arc::clone(&self.latest_requests), check_fixes: Arc::clone(&self.diagnostics.check_fixes), + mem_docs: self.mem_docs.clone(), } } @@ -255,6 +257,11 @@ impl GlobalStateSnapshot { self.vfs.read().1[&id] } + pub(crate) fn url_file_version(&self, url: &Url) -> Option { + let path = from_proto::vfs_path(&url).ok()?; + self.mem_docs.get(&path).copied()? + } + pub(crate) fn anchored_path(&self, file_id: FileId, path: &str) -> Url { let mut base = self.vfs.read().0.file_path(file_id); base.pop(); -- cgit v1.2.3