diff options
author | Zac Pullar-Strecker <[email protected]> | 2020-07-31 03:12:44 +0100 |
---|---|---|
committer | Zac Pullar-Strecker <[email protected]> | 2020-07-31 03:12:44 +0100 |
commit | f05d7b41a719d848844b054a16477b29d0f063c6 (patch) | |
tree | 0a8a0946e8aef2ce64d4c13d0035ba41cce2daf3 /crates/ra_ide/src/mock_analysis.rs | |
parent | 73ff610e41959e3e7c78a2b4b25b086883132956 (diff) | |
parent | 6b7cb8b5ab539fc4333ce34bc29bf77c976f232a (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.rs | 40 |
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 @@ | |||
2 | use std::sync::Arc; | 2 | use std::sync::Arc; |
3 | 3 | ||
4 | use ra_cfg::CfgOptions; | 4 | use ra_cfg::CfgOptions; |
5 | use ra_db::{CrateName, Env, FileSet, SourceRoot, VfsPath}; | 5 | use ra_db::{CrateName, FileSet, SourceRoot, VfsPath}; |
6 | use test_utils::{extract_range_or_offset, Fixture, RangeOrOffset, CURSOR_MARKER}; | 6 | use test_utils::{ |
7 | extract_annotations, extract_range_or_offset, Fixture, RangeOrOffset, CURSOR_MARKER, | ||
8 | }; | ||
7 | 9 | ||
8 | use crate::{ | 10 | use 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(), |