aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_ide/src/mock_analysis.rs
diff options
context:
space:
mode:
authorZac Pullar-Strecker <[email protected]>2020-07-31 03:12:44 +0100
committerZac Pullar-Strecker <[email protected]>2020-07-31 03:12:44 +0100
commitf05d7b41a719d848844b054a16477b29d0f063c6 (patch)
tree0a8a0946e8aef2ce64d4c13d0035ba41cce2daf3 /crates/ra_ide/src/mock_analysis.rs
parent73ff610e41959e3e7c78a2b4b25b086883132956 (diff)
parent6b7cb8b5ab539fc4333ce34bc29bf77c976f232a (diff)
Merge remote-tracking branch 'upstream/master' into 503-hover-doc-links
Hasn't fixed tests yet.
Diffstat (limited to 'crates/ra_ide/src/mock_analysis.rs')
-rw-r--r--crates/ra_ide/src/mock_analysis.rs40
1 files changed, 28 insertions, 12 deletions
diff --git a/crates/ra_ide/src/mock_analysis.rs b/crates/ra_ide/src/mock_analysis.rs
index 490ee0dc3..cf2ee1bfa 100644
--- a/crates/ra_ide/src/mock_analysis.rs
+++ b/crates/ra_ide/src/mock_analysis.rs
@@ -2,8 +2,10 @@
2use std::sync::Arc; 2use std::sync::Arc;
3 3
4use ra_cfg::CfgOptions; 4use ra_cfg::CfgOptions;
5use ra_db::{CrateName, Env, FileSet, SourceRoot, VfsPath}; 5use ra_db::{CrateName, FileSet, SourceRoot, VfsPath};
6use test_utils::{extract_range_or_offset, Fixture, RangeOrOffset, CURSOR_MARKER}; 6use test_utils::{
7 extract_annotations, extract_range_or_offset, Fixture, RangeOrOffset, CURSOR_MARKER,
8};
7 9
8use crate::{ 10use crate::{
9 Analysis, AnalysisChange, AnalysisHost, CrateGraph, Edition, FileId, FilePosition, FileRange, 11 Analysis, AnalysisChange, AnalysisHost, CrateGraph, Edition, FileId, FilePosition, FileRange,
@@ -69,13 +71,27 @@ impl MockAnalysis {
69 } 71 }
70 72
71 pub fn id_of(&self, path: &str) -> FileId { 73 pub fn id_of(&self, path: &str) -> FileId {
72 let (idx, _) = self 74 let (file_id, _) =
73 .files 75 self.files().find(|(_, data)| path == data.path).expect("no file in this mock");
74 .iter() 76 file_id
75 .enumerate() 77 }
76 .find(|(_, data)| path == data.path) 78 pub fn annotations(&self) -> Vec<(FileRange, String)> {
77 .expect("no file in this mock"); 79 self.files()
78 FileId(idx as u32 + 1) 80 .flat_map(|(file_id, fixture)| {
81 let annotations = extract_annotations(&fixture.text);
82 annotations
83 .into_iter()
84 .map(move |(range, data)| (FileRange { file_id, range }, data))
85 })
86 .collect()
87 }
88 pub fn files(&self) -> impl Iterator<Item = (FileId, &Fixture)> + '_ {
89 self.files.iter().enumerate().map(|(idx, fixture)| (FileId(idx as u32 + 1), fixture))
90 }
91 pub fn annotation(&self) -> (FileRange, String) {
92 let mut all = self.annotations();
93 assert_eq!(all.len(), 1);
94 all.pop().unwrap()
79 } 95 }
80 pub fn analysis_host(self) -> AnalysisHost { 96 pub fn analysis_host(self) -> AnalysisHost {
81 let mut host = AnalysisHost::default(); 97 let mut host = AnalysisHost::default();
@@ -94,12 +110,12 @@ impl MockAnalysis {
94 data.edition.and_then(|it| it.parse().ok()).unwrap_or(Edition::Edition2018); 110 data.edition.and_then(|it| it.parse().ok()).unwrap_or(Edition::Edition2018);
95 111
96 let file_id = FileId(i as u32 + 1); 112 let file_id = FileId(i as u32 + 1);
97 let env = Env::from(data.env.iter()); 113 let env = data.env.into_iter().collect();
98 if path == "/lib.rs" || path == "/main.rs" { 114 if path == "/lib.rs" || path == "/main.rs" {
99 root_crate = Some(crate_graph.add_crate_root( 115 root_crate = Some(crate_graph.add_crate_root(
100 file_id, 116 file_id,
101 edition, 117 edition,
102 Some(CrateName::new("test").unwrap()), 118 Some("test".to_string()),
103 cfg, 119 cfg,
104 env, 120 env,
105 Default::default(), 121 Default::default(),
@@ -110,7 +126,7 @@ impl MockAnalysis {
110 let other_crate = crate_graph.add_crate_root( 126 let other_crate = crate_graph.add_crate_root(
111 file_id, 127 file_id,
112 edition, 128 edition,
113 Some(CrateName::new(crate_name).unwrap()), 129 Some(crate_name.to_string()),
114 cfg, 130 cfg,
115 env, 131 env,
116 Default::default(), 132 Default::default(),