aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_ide/src/mock_analysis.rs
diff options
context:
space:
mode:
authorAleksey Kladov <[email protected]>2020-06-30 12:03:08 +0100
committerAleksey Kladov <[email protected]>2020-06-30 12:03:08 +0100
commit4484908a867fc742104d6ffe63b865a411203276 (patch)
tree048d7019112e588f4416ed88070f59ae46564d75 /crates/ra_ide/src/mock_analysis.rs
parentd34e725f09994af145884464942dd205bfc7717e (diff)
Rewrite goto definition tests
Diffstat (limited to 'crates/ra_ide/src/mock_analysis.rs')
-rw-r--r--crates/ra_ide/src/mock_analysis.rs28
1 files changed, 27 insertions, 1 deletions
diff --git a/crates/ra_ide/src/mock_analysis.rs b/crates/ra_ide/src/mock_analysis.rs
index 889b84c59..120d29aa0 100644
--- a/crates/ra_ide/src/mock_analysis.rs
+++ b/crates/ra_ide/src/mock_analysis.rs
@@ -3,11 +3,15 @@ use 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, Env, 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,
10}; 12};
13use ra_syntax::TextRange;
14use rustc_hash::FxHashMap;
11 15
12/// Mock analysis is used in test to bootstrap an AnalysisHost/Analysis 16/// Mock analysis is used in test to bootstrap an AnalysisHost/Analysis
13/// from a set of in-memory files. 17/// from a set of in-memory files.
@@ -77,6 +81,28 @@ impl MockAnalysis {
77 .expect("no file in this mock"); 81 .expect("no file in this mock");
78 FileId(idx as u32 + 1) 82 FileId(idx as u32 + 1)
79 } 83 }
84 pub fn annotations(&self) -> FxHashMap<FileId, Vec<(TextRange, String)>> {
85 self.files
86 .iter()
87 .enumerate()
88 .filter_map(|(idx, fixture)| {
89 let file_id = FileId(idx as u32 + 1);
90 let annotations = extract_annotations(&fixture.text);
91 if annotations.is_empty() {
92 return None;
93 }
94 Some((file_id, annotations))
95 })
96 .collect()
97 }
98 pub fn annotation(&self) -> (FileRange, String) {
99 let all = self.annotations();
100 assert_eq!(all.len(), 1);
101 let (file_id, mut for_file) = all.into_iter().next().unwrap();
102 assert_eq!(for_file.len(), 1);
103 let (range, data) = for_file.pop().unwrap();
104 (FileRange { file_id, range}, data)
105 }
80 pub fn analysis_host(self) -> AnalysisHost { 106 pub fn analysis_host(self) -> AnalysisHost {
81 let mut host = AnalysisHost::default(); 107 let mut host = AnalysisHost::default();
82 let mut change = AnalysisChange::new(); 108 let mut change = AnalysisChange::new();