]> git.lizzy.rs Git - rust.git/blob - crates/ide/src/mock_analysis.rs
Get rid of MockAnalysis
[rust.git] / crates / ide / src / mock_analysis.rs
1 //! FIXME: write short doc here
2
3 use base_db::fixture::ChangeFixture;
4 use test_utils::{extract_annotations, RangeOrOffset};
5
6 use crate::{Analysis, AnalysisHost, FileId, FilePosition, FileRange};
7
8 /// Creates analysis from a multi-file fixture, returns positions marked with <|>.
9 pub(crate) fn analysis_and_position(ra_fixture: &str) -> (Analysis, FilePosition) {
10     let mut host = AnalysisHost::default();
11     let change_fixture = ChangeFixture::parse(ra_fixture);
12     host.db.apply_change(change_fixture.change);
13     let (file_id, range_or_offset) = change_fixture.file_position.expect("expected a marker (<|>)");
14     let offset = match range_or_offset {
15         RangeOrOffset::Range(_) => panic!(),
16         RangeOrOffset::Offset(it) => it,
17     };
18     (host.analysis(), FilePosition { file_id, offset })
19 }
20
21 /// Creates analysis for a single file.
22 pub(crate) fn single_file(ra_fixture: &str) -> (Analysis, FileId) {
23     let mut host = AnalysisHost::default();
24     let change_fixture = ChangeFixture::parse(ra_fixture);
25     host.db.apply_change(change_fixture.change);
26     (host.analysis(), change_fixture.files[0])
27 }
28
29 /// Creates analysis for a single file.
30 pub(crate) fn many_files(ra_fixture: &str) -> (Analysis, Vec<FileId>) {
31     let mut host = AnalysisHost::default();
32     let change_fixture = ChangeFixture::parse(ra_fixture);
33     host.db.apply_change(change_fixture.change);
34     (host.analysis(), change_fixture.files)
35 }
36
37 /// Creates analysis for a single file, returns range marked with a pair of <|>.
38 pub(crate) fn analysis_and_range(ra_fixture: &str) -> (Analysis, FileRange) {
39     let mut host = AnalysisHost::default();
40     let change_fixture = ChangeFixture::parse(ra_fixture);
41     host.db.apply_change(change_fixture.change);
42     let (file_id, range_or_offset) = change_fixture.file_position.expect("expected a marker (<|>)");
43     let range = match range_or_offset {
44         RangeOrOffset::Range(it) => it,
45         RangeOrOffset::Offset(_) => panic!(),
46     };
47     (host.analysis(), FileRange { file_id, range })
48 }
49
50 /// Creates analysis from a multi-file fixture, returns positions marked with <|>.
51 pub(crate) fn analysis_and_annotations(
52     ra_fixture: &str,
53 ) -> (Analysis, FilePosition, Vec<(FileRange, String)>) {
54     let mut host = AnalysisHost::default();
55     let change_fixture = ChangeFixture::parse(ra_fixture);
56     host.db.apply_change(change_fixture.change);
57     let (file_id, range_or_offset) = change_fixture.file_position.expect("expected a marker (<|>)");
58     let offset = match range_or_offset {
59         RangeOrOffset::Range(_) => panic!(),
60         RangeOrOffset::Offset(it) => it,
61     };
62
63     let annotations = change_fixture
64         .files
65         .iter()
66         .flat_map(|&file_id| {
67             let file_text = host.analysis().file_text(file_id).unwrap();
68             let annotations = extract_annotations(&file_text);
69             annotations.into_iter().map(move |(range, data)| (FileRange { file_id, range }, data))
70         })
71         .collect();
72     (host.analysis(), FilePosition { file_id, offset }, annotations)
73 }