aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_db/src/fixture.rs
diff options
context:
space:
mode:
authorAleksey Kladov <[email protected]>2020-06-23 23:30:34 +0100
committerAleksey Kladov <[email protected]>2020-06-23 23:30:34 +0100
commite5101ae150db5faa7ddf8393e375032ef371f5e5 (patch)
tree89f9a2cc1c4113222bbb3e1241e68c712c2a21fb /crates/ra_db/src/fixture.rs
parent44cf263edf1c7e3b189ef5f1cfdf207dd28a0054 (diff)
Centralize fixture parsing for assists
Diffstat (limited to 'crates/ra_db/src/fixture.rs')
-rw-r--r--crates/ra_db/src/fixture.rs20
1 files changed, 15 insertions, 5 deletions
diff --git a/crates/ra_db/src/fixture.rs b/crates/ra_db/src/fixture.rs
index 3959d7efe..541815fe7 100644
--- a/crates/ra_db/src/fixture.rs
+++ b/crates/ra_db/src/fixture.rs
@@ -61,7 +61,7 @@ use std::{str::FromStr, sync::Arc};
61 61
62use ra_cfg::CfgOptions; 62use ra_cfg::CfgOptions;
63use rustc_hash::FxHashMap; 63use rustc_hash::FxHashMap;
64use test_utils::{extract_offset, Fixture, CURSOR_MARKER}; 64use test_utils::{extract_range_or_offset, Fixture, RangeOrOffset, CURSOR_MARKER};
65use vfs::{file_set::FileSet, VfsPath}; 65use vfs::{file_set::FileSet, VfsPath};
66 66
67use crate::{ 67use crate::{
@@ -86,9 +86,19 @@ pub trait WithFixture: Default + SourceDatabaseExt + 'static {
86 } 86 }
87 87
88 fn with_position(ra_fixture: &str) -> (Self, FilePosition) { 88 fn with_position(ra_fixture: &str) -> (Self, FilePosition) {
89 let (db, file_id, range_or_offset) = Self::with_range_or_offset(ra_fixture);
90 let offset = match range_or_offset {
91 RangeOrOffset::Range(_) => panic!(),
92 RangeOrOffset::Offset(it) => it,
93 };
94 (db, FilePosition { file_id, offset })
95 }
96
97 fn with_range_or_offset(ra_fixture: &str) -> (Self, FileId, RangeOrOffset) {
89 let mut db = Self::default(); 98 let mut db = Self::default();
90 let (pos, _) = with_files(&mut db, ra_fixture); 99 let (pos, _) = with_files(&mut db, ra_fixture);
91 (db, pos.unwrap()) 100 let (file_id, range_or_offset) = pos.unwrap();
101 (db, file_id, range_or_offset)
92 } 102 }
93 103
94 fn test_crate(&self) -> CrateId { 104 fn test_crate(&self) -> CrateId {
@@ -151,7 +161,7 @@ fn with_single_file(db: &mut dyn SourceDatabaseExt, ra_fixture: &str) -> FileId
151fn with_files( 161fn with_files(
152 db: &mut dyn SourceDatabaseExt, 162 db: &mut dyn SourceDatabaseExt,
153 fixture: &str, 163 fixture: &str,
154) -> (Option<FilePosition>, Vec<FileId>) { 164) -> (Option<(FileId, RangeOrOffset)>, Vec<FileId>) {
155 let fixture = Fixture::parse(fixture); 165 let fixture = Fixture::parse(fixture);
156 166
157 let mut files = Vec::new(); 167 let mut files = Vec::new();
@@ -193,9 +203,9 @@ fn with_files(
193 } 203 }
194 204
195 let text = if entry.text.contains(CURSOR_MARKER) { 205 let text = if entry.text.contains(CURSOR_MARKER) {
196 let (offset, text) = extract_offset(&entry.text); 206 let (range_or_offset, text) = extract_range_or_offset(&entry.text);
197 assert!(file_position.is_none()); 207 assert!(file_position.is_none());
198 file_position = Some(FilePosition { file_id, offset }); 208 file_position = Some((file_id, range_or_offset));
199 text.to_string() 209 text.to_string()
200 } else { 210 } else {
201 entry.text.to_string() 211 entry.text.to_string()